Getting max value from Stack in C, 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 max()
{
return minStack.top();
}
};
void main()
{
{
min_stack myStack;
myStack.push(12);
cout << "\nMax Val : " << myStack.max();
myStack.push(3);
cout << "\nMax Val : " << myStack.max();
myStack.push(40);
cout << "\nMax Val : " << myStack.max();
myStack.push(10);
cout << "\nMax Val : " << myStack.max();
myStack.push(1);
cout << "\nMax Val : " << myStack.max();
myStack.push(8);
cout << "\nMax Val : " << myStack.max();
cout << "\n\nAfter Poping\n\n";
while (!myStack.isEmpty())
{
cout << "\nMax Val : " << myStack.max();
cout << "\n[info] Poping : " << myStack.top() << endl;
myStack.pop();
}
}
_getch();
}
Thanks

Comments
Post a Comment