From da12821044aa004f7b1460c0b3d12706eda065a8 Mon Sep 17 00:00:00 2001 From: harshrai654 Date: Fri, 1 Oct 2021 19:40:52 +0530 Subject: [PATCH] Added Stack implemetation as header file --- Stack.h | 103 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 103 insertions(+) create mode 100755 Stack.h diff --git a/Stack.h b/Stack.h new file mode 100755 index 0000000..59baa2e --- /dev/null +++ b/Stack.h @@ -0,0 +1,103 @@ +#ifndef STACK_H +#define STACK_H + +#include +using namespace std; + +template +struct Node{ + T data; + Node* next; + Node(const T &d, Node*t):data{d},next{t}{} +}; + +template +class Stack{ + public: + Stack():top{nullptr},count{0}{ + // cout << "Stack initialised\n"; + } + + ~Stack(){ + if(top){ + Node*temp = top; + int count{0}; + while(temp){ + top = temp->next; + count++; + delete temp; + temp = top; + } + // cout << "Stack deleted::Elements deleted : " << count << endl; + }else{ + // cout << "Stack empty\n"; + } + } + + void push(const T& val){ + Node* temp; + + temp = new Node(val,top); + top = temp; + count++; + + } + + Node* getMiddle(){ + Node* slow = top; + Node* fast = top; + + while(fast && fast->next){ + slow = slow->next; + fast = fast->next->next; + } + + return slow; + } + + T getTop () const{ + if(top) + return top->data; + else + return 0; + } + + const T pop(){ + if(top){ + Node* temp = top; + T data = temp->data; + top = top -> next; + delete temp; + count--; + return data; + }else + { + cout << "Stack empty!!\n"; + } + + } + + bool isEmpty() const{ + return top?false:true; + } + + size_t length() const{ + return count; + } + + void print() const{ + Node* temp = top; + cout << "\n********Stack********\n"; + while(temp){ + cout << "\t" << temp->data << '\n'; + temp = temp->next; + } + cout << "********---********\n"; + } + + private: + Node * top; + size_t count; +}; + +#endif \ No newline at end of file