Print Stack Elements from Bottom to Top

06 Aug, 2021
Given a stack s, the task is to print the elements of the stack from bottom to top, such that the elements are still present in the stack without their order being changed in the stack.
Examples: 
Input : 
       
       
|   4    |
|   3    |
|   2    |
|   1    |
|________|

Output :1 2 3 4
Approach 1 (Recursion): The idea is to pop the element of the stack and call the recursive function PrintStack. Once the stack becomes empty start printing the element which was popped last and the last element that was popped was the bottom-most element. Thus, elements will be printed from bottom to top. Now push back the element that was printed, this will preserve the order of the elements in the stack.
Below is the implementation of the above approach:
C++
Java
Python3
C#
Javascript
// C++ program to print the elements of a// stack from bottom to top#include <bits/stdc++.h>using namespace std; // Recursive function to print stack elements// from bottom to top without changing// their ordervoid PrintStack(stack<int> s){    // If stack is empty then return    if (s.empty())        return;          int x = s.top();     // Pop the top element of the stack    s.pop();     // Recursively call the function PrintStack    PrintStack(s);     // Print the stack element starting    // from the bottom    cout << x << " ";     // Push the same element onto the stack    // to preserve the order    s.push(x);} // Driver codeint main(){    // Stack s    stack<int> s;     s.push(1);    s.push(2);    s.push(3);    s.push(4);     PrintStack(s);     return 0;}
// Java program to print the elements of a// stack from bottom to topimport java.util.*; class GfG{ // Recursive function to print stack elements// from bottom to top without changing// their orderstatic void PrintStack(Stack<Integer> s){    // If stack is empty then return    if (s.isEmpty())        return;         int x = s.peek();     // Pop the top element of the stack    s.pop();     // Recursively call the function PrintStack    PrintStack(s);     // Print the stack element starting    // from the bottom    System.out.print(x + " ");     // Push the same element onto the stack    // to preserve the order    s.push(x);} // Driver codepublic static void main(String[] args){    // Stack s    Stack<Integer> s = new Stack<Integer> ();     s.push(1);    s.push(2);    s.push(3);    s.push(4);     PrintStack(s);}} // This code is contributed by Prerna Saini.
# Python3 program to print the elements of a# stack from bottom to top # Stack class with all functionality of a stackimport sysclass Stack:    def __init__(self):        self.s = []     def push(self, data):        self.s.append(data)         def pop(self):        return self.s.pop()     def peek(self):        return self.s[-1]    def count(self):        return len(self.s) # Recursive function to print stack elements# from bottom to top without changing# their orderdef printStack(s):         # if stack is empty then simply return    if s.count() == 0:        return    x = s.peek()     # pop top most element of the stack    s.pop()         # recursively call the function printStack    printStack(s)         # Print the stack element starting    # from the bottom    print("{} ".format(x), end = "")         # Push the same element onto the stack    # to preserve the order    s.push(x) # Driver codeif __name__=='__main__':    s=Stack()    s.push(1)    s.push(2)    s.push(3)    s.push(4)     printStack(s) # This code is contributed by Vikas Kumar
// C# program to print the elements of a// stack from bottom to topusing System;using System.Collections.Generic; class GfG{ // Recursive function to print stack elements// from bottom to top without changing// their orderstatic void PrintStack(Stack<int> s){    // If stack is empty then return    if (s.Count == 0)        return;         int x = s.Peek();     // Pop the top element of the stack    s.Pop();     // Recursively call the function PrintStack    PrintStack(s);     // Print the stack element starting    // from the bottom    Console.Write(x + " ");     // Push the same element onto the stack    // to preserve the order    s.Push(x);} // Driver codepublic static void Main(){    // Stack s    Stack<int> s = new Stack<int> ();     s.Push(1);    s.Push(2);    s.Push(3);    s.Push(4);     PrintStack(s);}} /* This code contributed by PrinciRaj1992 */
<script> // Javascript program to print the elements// of a stack from bottom to top // Recursive function to print stack// elements from bottom to top without// changing their orderfunction PrintStack(s){         // If stack is empty then return    if (s.length == 0)        return;         var x = s[s.length - 1];     // Pop the top element of the stack    s.pop();     // Recursively call the function PrintStack    PrintStack(s);     // Print the stack element starting    // from the bottom    document.write(x + " ");     // Push the same element onto the stack    // to preserve the order    s.push(x);} // Driver code // Stack svar s = [];s.push(1);s.push(2);s.push(3);s.push(4); PrintStack(s); // This code is contributed by importantly </script>
1 2 3 4
 
Time Complexity: O(N) Auxiliary Space: O(N) 
Approach 2 (Using another stack): The idea is to push every element into another temporary stack and then print elements of the temporary stack. 
C++
Java
Python3
C#
Javascript
// C++ program to print the elements of a// stack from bottom to top#include <bits/stdc++.h>using namespace std; // Recursive function to print stack elements// from bottom to top without changing// their ordervoid PrintStack(stack<int> s){    stack<int> temp;    while (s.empty() == false)    {        temp.push(s.top());        s.pop();    }       while (temp.empty() == false)    {        int t = temp.top();        cout << t << " ";        temp.pop();         // To restore contents of        // the original stack.        s.push(t);     }} // Driver codeint main(){    // Stack s    stack<int> s;     s.push(1);    s.push(2);    s.push(3);    s.push(4);     PrintStack(s);     return 0;}
// Java program to print the// elements of a stack from// bottom to topimport java.util.*;class Main{   // Recursive function to print// stack elements from bottom// to top without changing// their orderpublic static void PrintStack(Stack<Integer> s){  Stack<Integer> temp = new Stack<Integer>();     while (s.empty() == false)  {    temp.push(s.peek());    s.pop();  }     while (temp.empty() == false)  {    int t = temp.peek();    System.out.print(t + " ");    temp.pop();     // To restore contents of    // the original stack.    s.push(t);   }} // Driver codepublic static void main(String[] args){  // Stack s  Stack<Integer> s = new Stack<Integer>();   s.push(1);  s.push(2);  s.push(3);  s.push(4);  PrintStack(s);}} // This code is contributed by divyeshrabadiya07
# Python3 program to print the elements of a# stack from bottom to top # Stack class with all functionality of a stackimport sysclass Stack:    def __init__(self):        self.s = []     def push(self, data):        self.s.append(data)         def pop(self):        return self.s.pop()     def peek(self):        return self.s[-1]    def count(self):        return len(self.s) # Recursive function to print stack elements# from bottom to top without changing# their orderdef printStack(s):    temp = Stack()    while(s.count() > 0):        temp.push(s.peek())        s.pop()         while(temp.count() > 0):        t = temp.peek()        print("{} " . format(temp.peek()), end = "")        temp.pop()         # Restore the contents of original stack        s.push(t) # Driver codeif __name__=='__main__':    s = Stack()    s.push(1)    s.push(2)    s.push(3)    s.push(4)     printStack(s) # This code is contributed by Vikash Kumar 37
// C# program to print the elements of// a stack from bottom to topusing System;using System.Collections; class GFG{ // Recursive function to print stack// elements from bottom to top without// changing their orderstatic void PrintStack(Stack s){    Stack temp = new Stack();    while (s.Count != 0)    {        temp.Push(s.Peek());        s.Pop();    }        while (temp.Count != 0)    {        int t = (int)temp.Peek();        Console.Write(t + " ");        temp.Pop();          // To restore contents of        // the original stack.        s.Push(t);     }} // Driver Codepublic static void Main(string[] args){         // Stack s    Stack s = new Stack();    s.Push(1);    s.Push(2);    s.Push(3);    s.Push(4);     PrintStack(s);}} // This code is contributed by rutvik_56
<script> // JavaScript program to print the elements of a// stack from bottom to top // Recursive function to print stack elements// from bottom to top without changing// their orderfunction PrintStack(s){    var temp = [];    while (s.length!=0)    {        temp.push(s[s.length-1]);        s.pop();    }       while (temp.length!=0)    {        var t = temp[temp.length-1];        document.write( t + " ");        temp.pop();         // To restore contents of        // the original stack.        s.push(t);     }} // Driver code// Stack svar s = [];s.push(1);s.push(2);s.push(3);s.push(4);PrintStack(s);  </script>
1 2 3 4
 
Time Complexity: O(N) Auxiliary Space: O(N)
prerna saini
princiraj1992
Vikash Kumar 37
rutvik_56
divyeshrabadiya07
importantly
itsok
pankajsharmagfg
Data Structures
Recursion
Stack
Data Structures
Recursion
Stack
Writing code in comment?
Please use ide.geeksforgeeks.org,
generate link and share the link here.
DSA Sheet by Love Babbar
SDE SHEET - A Complete Guide for SDE Preparation
What is Hashing | A Complete Tutorial
Introduction to Data Structures
Find if there is a path between two vertices in an undirected graph
Write a program to print all permutations of a given string
Given an array A[] and a number x, check for pair in A[] with sum as x (aka Two Sum)
Recursion
Program for Tower of Hanoi
Backtracking | Introduction