Getting max value from Stack in C, C++

Here is the code : Debug, Run and Learn

#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

Popular Posts