21xrx.com
2024-12-22 21:38:36 Sunday
登录
文章检索 我的文章 写文章
C++实现栈判断出栈顺序是否正确的代码
2023-06-29 01:01:48 深夜i     --     --
C++ 判断 出栈顺序 代码

在C++中,实现一个栈并判断出栈顺序是否正确是一个常见的问题。在本篇文章中,我们将探讨如何实现这个功能的代码。

首先,需要了解栈的特点,它遵循“后进先出”的原则。也就是说,每次只有最后添加的元素可以被移除。因此,栈顺序的正确性取决于元素的添加与移除顺序。

下面是一个简单的使用vector实现的栈类:


#include <vector>

using namespace std;

class Stack {

public:

  void push(int x) {

    elems.push_back(x);

  }

  

  int top() {

    return elems.back();

  }

  

  void pop() {

    elems.pop_back();

  }

  

  bool empty() {

    return elems.empty();

  }

  

private:

  vector<int> elems;

};

这里的“push”函数用于将元素添加到栈中,“top”函数用于获取栈顶元素,“pop”函数用于移除栈顶元素,“empty”函数用于判断栈是否为空。

现在,我们需要编写一个函数来判断给定的出栈序列是否与入栈序列匹配。下面是该函数的实现:


bool checkStackSequence(const vector<int>& pushSeq, const vector<int>& popSeq) {

  Stack s; // 创建一个栈实例

  int pushIdx = 0; // 入栈序列下标

  int popIdx = 0; // 出栈序列下标

  while (pushIdx < pushSeq.size()) {

    s.push(pushSeq[pushIdx++]); // 将元素依次添加到栈中

    while (!s.empty() && s.top() == popSeq[popIdx]) {

      // 当栈不为空且栈顶元素与出栈序列元素相同时,执行出栈操作

      s.pop();

      popIdx++; // 更新出栈序列下标

    }

  }

  return s.empty(); // 如果最后栈为空,说明出栈序列与入栈序列匹配

}

在这个函数中,我们使用了两个变量来跟踪入栈和出栈序列的下标。我们依次将入栈序列中的元素添加到栈中,然后不断检查栈顶元素是否与出栈序列中的下一个元素匹配。如果匹配,就执行出栈操作并更新出栈序列下标。如果最后栈为空,就说明出栈序列与入栈序列匹配,返回true,否则返回false。

为了测试这个函数,我们可以编写以下代码:


int main() {

  vector<int> pushSeq = 4;

  vector<int> popSeq1 = 2;

  vector<int> popSeq2 = 4;

  

  bool res1 = checkStackSequence(pushSeq, popSeq1); // 返回true

  bool res2 = checkStackSequence(pushSeq, popSeq2); // 返回false

  

  return 0;

}

在这个测试中,我们使用了两个不同的出栈序列来测试函数的正确性。第一个出栈序列与入栈序列匹配,因此返回true,而第二个出栈序列与入栈序列不匹配,返回false。

综上所述,这是一个简单而有效的方法来判断栈的出栈顺序是否正确的代码。

  
  

评论区

{{item['qq_nickname']}}
()
回复
回复