Basic Operations in Stack Data Structure
                                        
                                                                                    
                                                
                                                    Last Updated : 
                                                    22 Sep, 2025
                                                
                                                 
                                                 
                                             
                                                                             
                                                             
                            
                            
                                                                                    
                Stack is a linear data structure that follows the LIFO (Last In First Out) principle for inserting and deleting elements from it. 
In order to work with a stack, we have some fundamental operations that allow us to insert, remove, and access elements efficiently. These include:
- push() to insert an element into the stack
- top() Returns the top element of the stack.
- pop() to remove an element from the stack
- isEmpty() returns true if the stack is empty else false.
- size() returns the size of the stack.
We will now see how to perform these operations on Stack.
Push Operation in Stack:
Push operation is used to insert an element onto the top of the stack.
.webp?vpn-1) C++
            C++
    #include <stack>
using namespace std; 
int main() {
    // creating a stack of integers
    stack<int> st;  
    // This pushes 1 to the stack top
    st.push(1); 
    
    // This pushes 2 to the stack top
    st.push(2); 
    
    // This pushes 3 to the stack top
    st.push(3);  
}
import java.util.Stack;
class GfG {
    public static void main(String[] args) {
        
        // creating a stack of integers
        Stack<Integer> st = new Stack<>();
        // pushing elements into the stack
        
        // pushes 1
        st.push(1);  
        
        // pushes 2
        st.push(2);  
        
        // pushes 3
        st.push(3);  
    }
}
if __name__ == "__main__":
    # creating a stack of integers
    st = []
    
    # pushing elements into the stack
    
    # pushes 1
    st.append(1) 
    
    # pushes 2
    st.append(2)
    
    # pushes 3
    st.append(3)  
using System;
using System.Collections.Generic;
class GfG {
    static void Main() {
        
        // creating a stack of integers
        Stack<int> st = new Stack<int>();
        // pushing elements into the stack
        st.Push(1);  // pushes 1
        st.Push(2);  // pushes 2
        st.Push(3);  // pushes 3
    }
}
// Driver Code
// creating a stack using array
let st = [];
// pushing elements into the stack
st.push(1);  // pushes 1
st.push(2);  // pushes 2
st.push(3);  // pushes 3
Time Complexity: O(1), since insertion at the top takes constant time.
Auxiliary Space: O(1) 
Note: If the stack is implemented using a fixed-size array, inserting an element into a full stack will cause an overflow condition.
Top or Peek Operation in Stack:
Top or Peek operation is used to get the top element of the stack.
.webp?vpn-1) C++
            C++
    #include <iostream>
#include <stack>
using namespace std;
int main() {
    
    // creating a stack of integers
    stack<int> st; 
    
    st.push(1); 
    st.push(2); 
    st.push(3); 
        
    // Printing Current top element 
    cout << st.top() << " ";
    
    return 0;
}
import java.util.Stack;
class GfG {
    public static void main(String[] args) {
        
        // creating a stack of integers
        Stack<Integer> st = new Stack<>();
        
        st.push(1);
        st.push(2);
        st.push(3);
    
        // Printing current top element
        System.out.print(st.peek() + " ");
    }
}
if __name__ == "__main__":
    
    # creating a stack of integers
    st = []
    st.append(1)
    st.append(2)
    st.append(3)
    # Printing current top element
    print(st[-1])
using System;
using System.Collections.Generic;
class GfG {
    static void Main() {
    
        // creating a stack of integers
        Stack<int> st = new Stack<int>();
        
        st.Push(1);
        st.Push(2);
        st.Push(3);
        
        // Printing current top element
        Console.Write(st.Peek() + " ");
    }
}
// Driver Code
// creating a stack using array
let st = [];
st.push(1);
st.push(2);
st.push(3);
// Printing current top element
console.log(st[st.length - 1].toString() + " ");
Time Complexity: O(1)
Auxiliary Space: O(1) 
Pop Operation in Stack:
Pop operation is used to remove an element from the top of the stack.
The items are popped in the reversed order in which they are pushed.
.webp?vpn-1) C++
            C++
    #include <iostream>
#include <stack>
using namespace std;
int main() {
    
    // creating a stack of integers
    stack<int> st; 
    
    st.push(1); 
    st.push(2); 
    st.push(3); 
    // Printing Current top element 
    cout << st.top() << " ";
        
    // removes the top element from the stack
    st.pop(); 
    
    // Printing Current top element 
    cout << st.top() << " ";
        
    // removes the top element from the stack
    st.pop(); 
}
import java.util.Stack;
class GfG {
    public static void main(String[] args) {
        
        // creating a stack of integers
        Stack<Integer> st = new Stack<>();
        
        st.push(1);
        st.push(2);
        st.push(3);
        // Printing current top element
        System.out.print(st.peek() + " ");
            
        // removes the top element from the stack
        st.pop();
        
        // Printing current top element
        System.out.print(st.peek() + " ");
            
        // removes the top element from the stack
        st.pop();
    }
}
if __name__ == "__main__":
   
    # creating a stack of integers
    st = []
    st.append(1)
    st.append(2)
    st.append(3)
    # Printing current top element
    print(st[-1], end=" ")
    # removes the top element from the stack
    st.pop()
    # Printing current top element
    print(st[-1], end=" ")
    # removes the top element from the stack
    st.pop()
using System;
using System.Collections.Generic;
class GfG {
    static void Main() {
        
        // creating a stack of integers
        Stack<int> st = new Stack<int>();
        
        st.Push(1);
        st.Push(2);
        st.Push(3);
        
        // Printing current top element
        Console.Write(st.Peek() + " ");
            
        // removes the top element from the stack
        st.Pop();
                
        // Printing current top element
        Console.Write(st.Peek() + " ");
            
        // removes the top element from the stack
        st.Pop();
    }
}
// Driver Code
// creating a stack using array
let st = [];
st.push(1);
st.push(2);
st.push(3);
// Printing current top element
process.stdout.write(st[st.length - 1] + ' ');
    
// removes the top element from the stack
st.pop();
// Printing current top element
process.stdout.write(st[st.length - 1] + ' ');
    
// removes the top element from the stack
st.pop();
Time Complexity: O(1)
Auxiliary Space: O(1) 
Note: If a stack is empty, deleting an element will cause an underflow condition.
isEmpty Operation in Stack:
isEmpty operation is a boolean operation that is used to determine if the stack is empty or not. This will return true if the stack is empty, else false.
.webp?vpn-1) C++
            C++
    #include <iostream>
#include <stack>
using namespace std;
int main() { 
    stack<int> st; 
    // if stack is empty returns true else false
    if (st.empty()) { 
        cout << "Stack is empty." << endl; 
    } 
    else { 
        cout << "Stack is not empty." << endl; 
    } 
    // Inserting value 1 to the stack top 
    st.push(1);
    // if stack is empty returns true else false
    if (st.empty()) { 
        cout << "Stack is empty." << endl; 
    } 
    else { 
        cout << "Stack is not empty." << endl; 
    } 
}
import java.util.Stack;
public class GfG {
    public static void main(String[] args) {
        Stack<Integer> st = new Stack<>();
        // if stack is empty returns true else false
        if (st.isEmpty()) {
            System.out.println("Stack is empty.");
        } else {
            System.out.println("Stack is not empty.");
        }
        // Inserting value 1 to the stack top
        st.push(1);
        // if stack is empty returns true else false
        if (st.isEmpty()) {
            System.out.println("Stack is empty.");
        } else {
            System.out.println("Stack is not empty.");
        }
    }
}
if __name__ == "__main__":
    st = []
    # if stack is empty returns true else false
    if len(st) == 0:
        print("Stack is empty.")
    else:
        print("Stack is not empty.")
    # Inserting value 1 to the stack top
    st.append(1)
    # if stack is empty returns true else false
    if len(st) == 0:
        print("Stack is empty.")
    else:
        print("Stack is not empty.")
using System;
using System.Collections.Generic;
class GfG {
    static void Main() {
        
        Stack<int> st = new Stack<int>();
        
        // if stack is empty returns true else false
        if (st.Count == 0) {
            Console.WriteLine("Stack is empty.");
        } else {
            Console.WriteLine("Stack is not empty.");
        }
        
        // Inserting value 1 to the stack top
        st.Push(1);
        
        // if stack is empty returns true else false
        if (st.Count == 0) {
            Console.WriteLine("Stack is empty.");
        } else {
            Console.WriteLine("Stack is not empty.");
        }
    }
}
// Driver Code
let st = [];
// if stack is empty returns true else false
if (st.length === 0) {
    console.log("Stack is empty.");
} else {
    console.log("Stack is not empty.");
}
// Inserting value 1 to the stack top
st.push(1);
// if stack is empty returns true else false
if (st.length === 0) {
    console.log("Stack is empty.");
} else {
    console.log("Stack is not empty.");
}
OutputStack is empty.
Stack is not empty.
 Time Complexity: O(1)
Auxiliary Space: O(1) 
Size Operation in Stack:
Size operation in Stack is used to return the count of elements that are present inside the stack. 
            C++
    #include <iostream>
#include <stack>
using namespace std; 
int main() { 
    stack<int> st; 
    // Checking Current stack size
    cout << st.size() << endl;
    st.push(1);
    st.push(2); 
    // Checking current stack size 
    cout << st.size() << endl; 
}
import java.util.Stack;
public class Main {
    public static void main(String[] args) {
        Stack<Integer> st = new Stack<>();
        
        // Checking Current stack size
        System.out.println(st.size()); 
        
        st.push(1); 
        st.push(2); 
        
        // Checking Current stack size
        System.out.println(st.size());
    }
}
if __name__ == "__main__":
    st = []
    # Checking current stack size
    print(len(st))
    st.append(1)
    st.append(2)
    # Checking current stack size
    print(len(st))
using System;
using System.Collections.Generic;
class GfG {
    static void Main() {
        Stack<int> st = new Stack<int>();
        // Checking current stack size
        Console.WriteLine(st.Count);
        st.Push(1);
        st.Push(2);
        // Checking current stack size
        Console.WriteLine(st.Count);
    }
}
// Driver Code
let st = [];
// Checking current stack size
console.log(st.length);
st.push(1);
st.push(2);
// Checking current stack size
console.log(st.length);
Time Complexity: O(1)
Auxiliary Space: O(1) 
                                
                                
                            
                                                                                
                                                            
                                                    
                
    
        
        
            
                
                
Applications of Stack
            
            
            
                
                
Stack Data Structure
            
                                               
                                                        
                            
                        
                                                
                        
                                                                                    
                                                                Explore
                                    
                                        DSA Fundamentals
Data Structures
Algorithms
Advanced
Interview Preparation
Practice Problem