Reverse a stack using temp memory and using recursion

Here is the code :

#include <iostream>
#include <conio.h>
#include <stack>

using namespace std;

void reverse_stack1(stack<int> &s)
{
  stack<int> temp;

  while (!s.empty())
  {
    temp.push(s.top());

    s.pop();
  }

  s = temp;
}

void insertAtBottom(stack<int> &s, int val)
{
  if (s.empty())
  {
    s.push(val);
  }
  else {
    int temp = s.top();
    s.pop();
    insertAtBottom(s, val);
    s.push(temp);
  }
}

void reverse_stack2(stack<int> &s)
{
  if (!s.empty())
  {
    int temp = s.top();
    s.pop();

    reverse_stack2(s);
    insertAtBottom(s, temp);
  }
}



void print_stack(stack<int> s)
{
  while (!s.empty())
  {
    cout << s.top() << " ";
    s.pop();
  }
}

void main()
{
  stack<int> s_int;

  for (int i = 0; i <= 10; ++i)
  {
    s_int.push(i);
  }

  cout << "Before sorting " << endl;
  print_stack(s_int);

  stack<int> s = s_int;

  cout << endl << endl;
  cout << "After sorting (using reverse_stack2)" << endl;
  reverse_stack2(s_int);
  print_stack(s_int);

  cout << endl << endl;
  cout << "After sorting (using reverse_stack1)" << endl;
  reverse_stack1(s);
  print_stack(s);


  _getch();
}

Thanks

Comments

Popular Posts