summaryrefslogtreecommitdiff
path: root/I_anno/Programmazione_2/data_structures/stack_w_array.cc
diff options
context:
space:
mode:
Diffstat (limited to 'I_anno/Programmazione_2/data_structures/stack_w_array.cc')
-rw-r--r--I_anno/Programmazione_2/data_structures/stack_w_array.cc50
1 files changed, 50 insertions, 0 deletions
diff --git a/I_anno/Programmazione_2/data_structures/stack_w_array.cc b/I_anno/Programmazione_2/data_structures/stack_w_array.cc
new file mode 100644
index 0000000..c20db90
--- /dev/null
+++ b/I_anno/Programmazione_2/data_structures/stack_w_array.cc
@@ -0,0 +1,50 @@
+#include<iostream>
+
+using namespace std;
+
+template<class H>
+class stack {
+public:
+ stack(int n) : _size{n}, _top{-1} {
+ _arr = new H[n];
+ }
+ ~stack() {
+ delete _arr;
+ }
+ bool is_empty() {
+ return _top == -1;
+ }
+ bool is_full() {
+ return _top == _size-1;
+ }
+ stack<H>* push(H x) {
+ if(!is_full()) {
+ _arr[++_top] = x;
+ }
+ return this;
+ }
+ H pop() {
+ if(is_empty())
+ return -1;
+ _top--;
+ return _arr[_top+1];
+ }
+private:
+ int _size;
+ H* _arr;
+ short _top;
+};
+
+int main() {
+ stack<int>* s = new stack<int>{7};
+
+ s->push(15)->push(6)->push(2)->push(9)->push(17)->push(3);
+ cout << s->pop() << '\n';
+ s->push(18)->push(19)->push(12);
+
+ for(int i = 0; i < 7; ++i)
+ cout << s->pop() << ' ';
+
+ delete s;
+ return 0;
+}