summaryrefslogtreecommitdiff
path: root/1_anno/Programmazione_2/data_structures/queue_w_array.cc
diff options
context:
space:
mode:
authorSanto Cariotti <dcariotti24@gmail.com>2020-10-18 18:56:43 +0200
committerSanto Cariotti <dcariotti24@gmail.com>2020-10-18 18:59:42 +0200
commit6c6328375c55683645146909b7ab760d0de0d463 (patch)
treeb18e695dfe7a10064fed111649253dc2c77208bf /1_anno/Programmazione_2/data_structures/queue_w_array.cc
parent4e063e32250312c38d5646840719b62429362b21 (diff)
chore: name of first year folder
Diffstat (limited to '1_anno/Programmazione_2/data_structures/queue_w_array.cc')
-rw-r--r--1_anno/Programmazione_2/data_structures/queue_w_array.cc66
1 files changed, 66 insertions, 0 deletions
diff --git a/1_anno/Programmazione_2/data_structures/queue_w_array.cc b/1_anno/Programmazione_2/data_structures/queue_w_array.cc
new file mode 100644
index 0000000..fb92d68
--- /dev/null
+++ b/1_anno/Programmazione_2/data_structures/queue_w_array.cc
@@ -0,0 +1,66 @@
+#include<iostream>
+
+using namespace std;
+
+template<class H>
+class queue {
+public:
+ queue(int n) : _size{n}, _counter{0}, _head{0}, _tail{0} {
+ _arr = new H[n];
+ }
+ ~queue() {
+ delete _arr;
+ }
+ bool is_empty() {
+ return _counter == 0;
+ }
+ bool is_full() {
+ return _counter == _size;
+ }
+
+ queue<H>* enqueue(H x) {
+ if(!is_full()) {
+ _arr[_tail] = x;
+ if(_tail == _size-1)
+ _tail = 0;
+ else
+ ++_tail;
+ _counter++;
+ }
+
+ return this;
+ }
+ H dequeue() {
+ if(is_empty()) return -1;
+ H x = _arr[_head];
+
+ if(_head == _size-1)
+ _head = 0;
+ else
+ ++_head;
+
+ _counter--;
+ return x;
+ }
+private:
+ H* _arr;
+ int _size;
+ short _counter;
+ short _head;
+ short _tail;
+};
+
+int main() {
+ queue<int>* q = new queue<int>{4};
+ q->enqueue(5)->enqueue(13)->enqueue(3);
+ cout << q->dequeue() << '\n';
+ q->enqueue(4)->enqueue(6)->enqueue(7);
+ q->dequeue();
+ q->enqueue(7);
+
+ for(int i = 0; i < 6; ++i) {
+ cout << q->dequeue() << ' ';
+ }
+ delete q;
+ return 0;
+}