# 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:

## Recommended: Please try your approach on {IDE} first, before moving on to the solution.

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++

 `// C++ program to check if the given ` `// stacks are equal or not ` ` `  `#include ` `using` `namespace` `std; ` ` `  `// Function to check if the two given ` `// stacks are same ` `bool` `isSameStack(stack stack1, stack 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 stack1; ` `    ``stack 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

 `// 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 stack1,  ` `                            ``Stack 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 stack1 = ``new` `Stack(); ` `    ``Stack stack2 = ``new` `Stack(); ` ` `  `    ``// 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

 `# 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#

 `// 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 stack1,  ` `                            ``Stack 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 stack1 = ``new` `Stack();  ` `    ``Stack stack2 = ``new` `Stack();  ` ` `  `    ``// 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 `

Output:

```Stacks are Same
```

My Personal Notes arrow_drop_up

Just another competitive programmer and hard worker

If you like GeeksforGeeks and would like to contribute, you can also write an article using contribute.geeksforgeeks.org or mail your article to contribute@geeksforgeeks.org. See your article appearing on the GeeksforGeeks main page and help other Geeks.

Please Improve this article if you find anything incorrect by clicking on the "Improve Article" button below.

Article Tags :
Practice Tags :

2

Please write to us at contribute@geeksforgeeks.org to report any issue with the above content.