Open In App

Check if the two given stacks are same

Given two Stacks, the task is to check if the given stacks are same or not.
Two stacks are said to be same if they contains the same elements in the same order.
Example
 

 

Approach: 
 

  1. Take a flag variable and set it to true initially, flag = true. This variable will indicate whether the stacks are same or not.
  2. First check if the size of given stack1 and stack2 are equal. If the size is not equal, set flag to false and return it.
  3. If the size is same, then compare the top elements of both of the given stacks.
  4. If the top of both stacks is NOT same, set flag to false and return it otherwise pop top elements of both stacks.
  5. Repeat step 3 and 4 until all elements are popped out from both of the stacks.
  6. If both stacks gets empty and the flag variable is still true, it means that the stacks are same.

Below is the implementation of the above idea: 
 




// C++ program to check if the given
// stacks are equal or not
 
#include <bits/stdc++.h>
using namespace std;
 
// Function to check if the two given
// stacks are same
bool isSameStack(stack<string> stack1, stack<string> stack2)
{
    // Create a flag variable
    bool flag = true;
 
    // Check if size of both stacks are same
    if (stack1.size() != stack2.size()) {
        flag = false;
        return flag;
    }
 
    // Until the stacks are not empty
    // compare top of both stacks
    while (stack1.empty() == false) {
        // If the top elements of both stacks
        // are same
        if (stack1.top() == stack2.top()) {
            // Pop top of both stacks
            stack1.pop();
            stack2.pop();
        }
        else {
            // Otherwise, set flag to false
            flag = false;
            break;
        }
    }
 
    // Return flag
    return flag;
}
 
// Driver Code
int main()
{
    // Creating stacks
    stack<string> stack1;
    stack<string> stack2;
 
    // Inserting elements to stack1
    stack1.push("Geeks");
    stack1.push("4");
    stack1.push("Geeks");
    stack1.push("Welcomes");
    stack1.push("You");
 
    // Inserting elements to stack2
    stack2.push("Geeks");
    stack2.push("4");
    stack2.push("Geeks");
    stack2.push("Welcomes");
    stack2.push("You");
 
    if (isSameStack(stack1, stack2))
        cout << "Stacks are Same";
    else
        cout << "Stacks are not Same";
 
    return 0;
}




// Java program to check if the given
// stacks are equal or not
import java.util.*;
 
class GFG
{
 
// Function to check if the two given
// stacks are same
static boolean isSameStack(Stack<String> stack1,
                            Stack<String> stack2)
{
    // Create a flag variable
    boolean flag = true;
 
    // Check if size of both stacks are same
    if (stack1.size() != stack2.size())
    {
        flag = false;
        return flag;
    }
 
    // Until the stacks are not empty
    // compare top of both stacks
    while (stack1.empty() == false)
    {
        // If the top elements of both stacks
        // are same
        if (stack1.peek() == stack2.peek())
        {
            // Pop top of both stacks
            stack1.pop();
            stack2.pop();
        }
        else
        {
            // Otherwise, set flag to false
            flag = false;
            break;
        }
    }
 
    // Return flag
    return flag;
}
 
// Driver Code
public static void main(String arr[])
{
    // Creating stacks
    Stack<String> stack1 = new Stack<String>();
    Stack<String> stack2 = new Stack<String>();
 
    // Inserting elements to stack1
    stack1.push("Geeks");
    stack1.push("4");
    stack1.push("Geeks");
    stack1.push("Welcomes");
    stack1.push("You");
 
    // Inserting elements to stack2
    stack2.push("Geeks");
    stack2.push("4");
    stack2.push("Geeks");
    stack2.push("Welcomes");
    stack2.push("You");
 
    if (isSameStack(stack1, stack2))
        System.out.println("Stacks are Same");
    else
        System.out.println("Stacks are not Same");
 
}
}
 
/* This code contributed by PrinciRaj1992 */




# Python3 program to check if the given
# stacks are equal or not
 
# Function to check if the two given
# stacks are same
def isSameStack(stack1, stack2) :
 
    # Create a flag variable
    flag = True;
 
    # Check if size of both stacks are same
    if (len(stack1) != len(stack2)) :
        flag = False;
        return flag;
 
    # Until the stacks are not empty
    # compare top of both stacks
    while (len(stack1)) :
         
        # If the top elements of both stacks
        # are same
        if (stack1[0] == stack2[0]) :
            # Pop top of both stacks
            stack1.pop();
            stack2.pop();
 
        else :
             
            # Otherwise, set flag to false
            flag = False;
            break;
 
    # Return flag
    return flag;
 
 
# Driver Code
if __name__ == "__main__" :
 
    # Creating stacks
    stack1 = [];
    stack2 = [];
 
    # Inserting elements to stack1
    stack1.append("Geeks");
    stack1.append("4");
    stack1.append("Geeks");
    stack1.append("Welcomes");
    stack1.append("You");
 
    # Inserting elements to stack2
    stack2.append("Geeks");
    stack2.append("4");
    stack2.append("Geeks");
    stack2.append("Welcomes");
    stack2.append("You");
 
    if (isSameStack(stack1, stack2)) :
        print("Stacks are Same");
    else :
        print("Stacks are not Same");
 
# This code is contributed by AnkitRai01




// C# program to check if the given
// stacks are equal or not
using System;
using System.Collections.Generic;
 
class GFG
{
 
// Function to check if the two given
// stacks are same
static Boolean isSameStack(Stack<String> stack1,
                            Stack<String> stack2)
{
    // Create a flag variable
    Boolean flag = true;
 
    // Check if size of both stacks are same
    if (stack1.Count != stack2.Count)
    {
        flag = false;
        return flag;
    }
 
    // Until the stacks are not empty
    // compare top of both stacks
    while (stack1.Count!=0)
    {
        // If the top elements of both stacks
        // are same
        if (stack1.Peek() == stack2.Peek())
        {
            // Pop top of both stacks
            stack1.Pop();
            stack2.Pop();
        }
        else
        {
            // Otherwise, set flag to false
            flag = false;
            break;
        }
    }
 
    // Return flag
    return flag;
}
 
// Driver Code
public static void Main(String []arr)
{
    // Creating stacks
    Stack<String> stack1 = new Stack<String>();
    Stack<String> stack2 = new Stack<String>();
 
    // Inserting elements to stack1
    stack1.Push("Geeks");
    stack1.Push("4");
    stack1.Push("Geeks");
    stack1.Push("Welcomes");
    stack1.Push("You");
 
    // Inserting elements to stack2
    stack2.Push("Geeks");
    stack2.Push("4");
    stack2.Push("Geeks");
    stack2.Push("Welcomes");
    stack2.Push("You");
 
    if (isSameStack(stack1, stack2))
        Console.WriteLine("Stacks are Same");
    else
        Console.WriteLine("Stacks are not Same");
 
}
}
 
// This code has been contributed by 29AjayKumar




<script>
 
// JavaScript program to check if the given
// stacks are equal or not
 
// Function to check if the two given
// stacks are same
function isSameStack(stack1,stack2)
{
    // Create a flag variable
    let flag = true;
   
    // Check if size of both stacks are same
    if (stack1.length != stack2.length)
    {
        flag = false;
        return flag;
    }
   
    // Until the stacks are not empty
    // compare top of both stacks
    while (stack1.length == false)
    {
        // If the top elements of both stacks
        // are same
        if (stack1[stack1.length-1] == stack2[stack2.length-1])
        {
            // Pop top of both stacks
            stack1.pop();
            stack2.pop();
        }
        else
        {
            // Otherwise, set flag to false
            flag = false;
            break;
        }
    }
   
    // Return flag
    return flag;
}
 
// Driver Code
 
// Creating stacks
let stack1 = [];
let stack2 = [];
 
// Inserting elements to stack1
stack1.push("Geeks");
stack1.push("4");
stack1.push("Geeks");
stack1.push("Welcomes");
stack1.push("You");
 
// Inserting elements to stack2
stack2.push("Geeks");
stack2.push("4");
stack2.push("Geeks");
stack2.push("Welcomes");
stack2.push("You");
 
if (isSameStack(stack1, stack2))
    document.write("Stacks are Same");
else
    document.write("Stacks are not Same");
 
 
// This code is contributed by rag2127
 
</script>

Output
Stacks are Same

Time Complexity: O(N), as we are using a loop that will traverse N times in the worst case. Where N is the number of elements in the stacks.

Auxiliary Space: O(1), as we are not using any extra space.


Article Tags :