summaryrefslogtreecommitdiff
path: root/I_anno/Programmazione_2/data_structures
diff options
context:
space:
mode:
Diffstat (limited to 'I_anno/Programmazione_2/data_structures')
-rw-r--r--I_anno/Programmazione_2/data_structures/stack.cc66
1 files changed, 66 insertions, 0 deletions
diff --git a/I_anno/Programmazione_2/data_structures/stack.cc b/I_anno/Programmazione_2/data_structures/stack.cc
new file mode 100644
index 0000000..efdb939
--- /dev/null
+++ b/I_anno/Programmazione_2/data_structures/stack.cc
@@ -0,0 +1,66 @@
+#include<iostream>
+
+using namespace std;
+
+template<typename T>
+struct node {
+ T value;
+ node<T>* next;
+};
+
+template<class T>
+class stack {
+public:
+ stack() : _head{nullptr} {}
+ ~stack() {
+ auto iter = _head;
+ while(iter) {
+ delete iter;
+ iter = iter->next;
+ }
+ }
+ stack<T>* push(T val) {
+
+ if(!_head) {
+ _head = new node<T>{val, nullptr};
+ } else {
+ _head = new node<T>{val, _head};
+ }
+
+ return this;
+ }
+
+ stack<T>* pop() {
+ if(!_head) return this;
+
+ auto old_head = _head;
+ _head = _head->next;
+ delete old_head;
+
+ return this;
+ }
+
+ void print() {
+ auto iter = _head;
+ while(iter) {
+ cout << iter->value << ' ';
+ iter = iter->next;
+ }
+ cout << endl;
+ }
+private:
+ node<T>* _head;
+};
+
+int main() {
+ stack<int>* s = new stack<int>();
+
+ s->pop();
+ s->push(4)->push(2)->push(8);
+ s->pop();
+ s->push(1);
+ s->print();
+
+ delete s;
+ return 0;
+}