📌  相关文章
📜  检查两个给定的堆栈是否相同

📅  最后修改于: 2021-05-20 07:04:58             🧑  作者: Mango

给定两个堆栈,任务是检查给定堆栈是否相同。

如果两个堆栈包含相同顺序的相同元素,则称它们是相同的。

范例

方法:

  1. 取一个flag变量并将其初始设置为true, flag = true 。此变量将指示堆栈是否相同。
  2. 首先检查给定stack1stack2的大小是否相等。如果大小不相等,则将标志设置为false并将其返回。
  3. 如果大小相同,则比较两个给定堆栈的顶部元素。
  4. 如果两个堆栈的顶部都不相同,请将flag设置为false,然后将其返回,否则会弹出两个堆栈的顶部元素。
  5. 重复步骤3和4,直到所有元素都从两个堆栈中弹出。
  6. 如果两个堆栈都为空,并且flag变量仍然为true,则表示堆栈相同。

以下是上述想法的实现:

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


输出:
Stacks are Same