summaryrefslogtreecommitdiff
path: root/1_anno/Programmazione_2/data_structures/queue.cc
diff options
context:
space:
mode:
Diffstat (limited to '1_anno/Programmazione_2/data_structures/queue.cc')
-rw-r--r--1_anno/Programmazione_2/data_structures/queue.cc72
1 files changed, 72 insertions, 0 deletions
diff --git a/1_anno/Programmazione_2/data_structures/queue.cc b/1_anno/Programmazione_2/data_structures/queue.cc
new file mode 100644
index 0000000..8398459
--- /dev/null
+++ b/1_anno/Programmazione_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;
+}