From 8cf1283a4ffb9fe1901c29c087fa376de82726af Mon Sep 17 00:00:00 2001 From: angeld55 Date: Sat, 19 Feb 2022 23:30:52 +0200 Subject: clean up --- Sem. 10/README.md | 70 ----------------------- Sem. 10/task1/Queue.hpp | 144 ------------------------------------------------ Sem. 10/task1/main.cpp | 23 -------- 3 files changed, 237 deletions(-) delete mode 100644 Sem. 10/README.md delete mode 100644 Sem. 10/task1/Queue.hpp delete mode 100644 Sem. 10/task1/main.cpp (limited to 'Sem. 10') diff --git a/Sem. 10/README.md b/Sem. 10/README.md deleted file mode 100644 index 40d6502..0000000 --- a/Sem. 10/README.md +++ /dev/null @@ -1,70 +0,0 @@ -## Шаблони -Функция/клас, която работи не с променливи от някакъв дефиниран тип, а с абстрактни променливи, се нарича шаблонна функция/клас -```c++ -#include -using namespace std; - -template -T sum(T a, T b) -{ - return a + b; -} - -int main() -{ - int a = 4; - int b = 9; - cout << sum(a, b) << endl; - - double c = 3.14; - double d = 4.5; - cout << sum(c,d) << endl; - - return 0; -} -``` -Компилаторът генерира т. нар. шаблонна функция, като замества параметрите на шаблона с типовете на съответните фактически параметри. - -**Задача 1:** -Релизирайте структурата от данни опашка. Опашката трябва да работи с **произволни типове**. След като е добавен един елемент в края на опашката, той ще може да бъде извлечен (премахнат) единствено след като бъдат премахнати всички елементи преди него в реда, в който са добавени. - -**Пример**: - ```c++ -int main() -{ - quene q; - q.enqueue(3); - q.enqueue(5); - q.enqueue(10); - - cout << q.dequeue() << endl; //3 - cout << q.dequeue() << endl; //5 - cout << q.dequeue() << endl; //10 - - cout << q.isEmpty() << endl; //1 -} - ``` - **Задача 2:** - Създайте **шаблонна** опашка с k приоритета. При взимане на елемент от опашката трябва да се връща най-отдавна добавения елемент от тези с най-висок приоритет. - - ```c++ -int main() -{ - kPriorityQueue q(4); // 4 priorities - 0, 1, 2 и 3. - - q.enqueue('A',0): //adds A with lowest priority: 0 - q.enqueue('B',3); - q.enqueue('C',2); - q.enqueue('D',2); - q.enqueue('E',1); - - //q.enqueue('F', 5); //error! No such priority! - - q.dequeue(); // B - q.dequeue(); // C - q.dequeue(); // D - q.dequeue(); // E - q.dequeue(); // A -} - ``` - diff --git a/Sem. 10/task1/Queue.hpp b/Sem. 10/task1/Queue.hpp deleted file mode 100644 index 1f7f854..0000000 --- a/Sem. 10/task1/Queue.hpp +++ /dev/null @@ -1,144 +0,0 @@ -#include - -template -class Queue -{ - T* data; - size_t capacity; - size_t count; - - size_t head; //where to get - size_t tail; //last added element; - - void resize(size_t newCapacity); - - void copyFrom(const Queue& other); - void free(); -public: - Queue(); - - Queue(const Queue& other); - Queue& operator=(const Queue& other); - - void enqueue(const T& obj); - T dequeue(); - - size_t getCount(); - size_t isEmpty(); - - ~Queue(); -}; - -template -Queue::Queue() -{ - capacity = 4; - data = new T[capacity]; - - count = 0; - head = tail = 0; -} - - - -template -void Queue::enqueue(const T& obj) -{ - if (count == capacity) - resize(capacity * 2); - if (count != 0) - tail++; - - tail %= capacity; //so we don't get an out of range exception - - data[tail] = obj; - - count++; -} - -template -T Queue::dequeue() -{ - if (count == 0) - throw std::exception("The collection is empty!"); - - T toReturn = data[head]; - (++head) %= capacity; - - count--; - - return toReturn; -} - -template -size_t Queue::getCount() -{ - return count; -} - -template -size_t Queue::isEmpty() -{ - return getCount() == 0; -} - -template -void Queue::resize(size_t newCapacity) -{ - T* newData = new T[newCapacity]; - - for (int i = 0, ind = head; i < count; i++, (++ind) %= capacity) - newData[i] = data[ind]; - - delete[] data; - capacity = newCapacity; - data = newData; - - head = 0; - tail = count - 1; -} - -template -void Queue::copyFrom(const Queue& other) -{ - data = new T[other.capacity]; - for (int i = 0; i < other.capacity; i++) - data[i] = other.data[i]; - - head = other.head; - tail = other.tail; - - count = other.count; - capacity = other.capacity; - -} - -template -void Queue::free() -{ - delete[] data; -} - -template -Queue::Queue(const Queue& other) -{ - copyFrom(other); - -} - -template -Queue& Queue::operator=(const Queue& other) -{ - if (this != &other) - { - free(); - copyFrom(other); - } - return *this; -} - -template -Queue::~Queue() -{ - free(); -} diff --git a/Sem. 10/task1/main.cpp b/Sem. 10/task1/main.cpp deleted file mode 100644 index e52579a..0000000 --- a/Sem. 10/task1/main.cpp +++ /dev/null @@ -1,23 +0,0 @@ -#include -#include "Queue.hpp" -using namespace std; - - - -int main() -{ - Queue q; - - q.enqueue('A'); - q.enqueue('B'); - q.enqueue('C'); - q.enqueue('D'); - cout << q.dequeue() << endl; - q.enqueue('E'); - q.enqueue('F'); - cout << q.dequeue() << endl; - cout << q.dequeue() << endl; - cout << q.dequeue() << endl; - cout << q.dequeue() << endl; - cout << q.dequeue() << endl; -} \ No newline at end of file -- cgit v1.3.1-23-gd82d