Getting min value from the stack in O(1) time C++
Here is the code : Debug, Run and Learn
Thanks
#include <iostream> #include <conio.h> using namespace std; struct node { int val; node *next; node(int value) { val = value; next = NULL; } }; class stack { private: node *head; public: stack() : head(NULL) {} virtual void push(int val) { if (head == NULL) { head = new node(val); } else { node *newNode = new node(val); newNode->next = head; head = newNode; } } bool isEmpty() { return head == NULL; } int top() { return head->val; } virtual void pop() { node *nextNode = head->next; delete head; head = nextNode; } void printStack() { cout << endl << "Stack Traces : "; for (node *current = head; current != NULL; current = current->next) { cout << current->val << " "; } } virtual ~stack() { while (head != NULL) { pop(); } } }; class min_stack : public stack { private: stack minStack; // Stack to maintain public: void push(int val) { if (minStack.isEmpty()) { minStack.push(val); } else if (val < minStack.top()) { minStack.push(val); } else { minStack.push(minStack.top()); } stack::push(val); } void pop() { minStack.pop(); stack::pop(); } virtual ~min_stack() { while (!minStack.isEmpty()) { minStack.pop(); } } int min() { return minStack.top(); } }; void main() { { min_stack myStack; myStack.push(12); cout << "\nMin Val : " << myStack.min(); myStack.push(3); cout << "\nMin Val : " << myStack.min(); myStack.push(40); cout << "\nMin Val : " << myStack.min(); myStack.push(10); cout << "\nMin Val : " << myStack.min(); myStack.push(1); cout << "\nMin Val : " << myStack.min(); myStack.push(8); cout << "\nMin Val : " << myStack.min(); cout << "\nAfter Poping\n\n"; while (!myStack.isEmpty()) { cout << "\nMin Val : " << myStack.min(); myStack.pop(); } } _getch(); }
Thanks
Comments
Post a Comment