diff options
author | Santo Cariotti <santo@dcariotti.me> | 2021-02-06 19:56:36 +0100 |
---|---|---|
committer | Santo Cariotti <santo@dcariotti.me> | 2021-02-06 19:56:36 +0100 |
commit | d2edbc38cac8da52f58c5cd3da6c0c625fa05736 (patch) | |
tree | a51e9a4e56fc9d4c7c9e37576dceedca3a0c72b4 /Year_1/Programming_2/data_structures/queue.cc | |
parent | 98f34040820dc3a964b7be59a698323e8cc6c8a3 (diff) |
conf: rename
Diffstat (limited to 'Year_1/Programming_2/data_structures/queue.cc')
-rw-r--r-- | Year_1/Programming_2/data_structures/queue.cc | 72 |
1 files changed, 72 insertions, 0 deletions
diff --git a/Year_1/Programming_2/data_structures/queue.cc b/Year_1/Programming_2/data_structures/queue.cc new file mode 100644 index 0000000..8398459 --- /dev/null +++ b/Year_1/Programming_2/data_structures/queue.cc @@ -0,0 +1,72 @@ +#include<iostream> + +using namespace std; + +template<typename T> +struct node { + T value; + node<T>* next; +}; + +template<class T> +class queue { +public: + queue() : _head{nullptr} {} + + ~queue() { + auto iter = _head; + while(iter) { + delete iter; + iter = iter->next; + } + } + + queue<T>* enqueue(T val) { + + if(!_head) { + _head = new node<T>{val, nullptr}; + _tail = _head; + } else { + _tail->next = new node<T>{val, nullptr}; + _tail = _tail->next; + } + + return this; + } + + node<T>* dequeue() { + if(!_head) return nullptr; + auto iter = _head; + delete _head; + _head = iter->next; + return iter; + } + + void print() { + auto iter = _head; + while(iter) { + cout << iter->value << ' '; + iter = iter->next; + } + cout << endl; + } +private: + node<T>* _head; + node<T>* _tail; +}; + +int main() { + queue<int>* q = new queue<int>(); + + q->dequeue(); + q->enqueue(4)->enqueue(2)->enqueue(8); + q->print(); + auto e = q->dequeue(); + if(e) + cout << e->value << endl; + q->enqueue(1); + q->print(); + + delete q; + return 0; +} |