当前位置:实例文章 » 其他实例» [文章]JZ31 栈的压入、弹出序列-C++

JZ31 栈的压入、弹出序列-C++

发布人:shili8 发布时间:2025-02-13 00:21 阅读次数:0

**栈的压入、弹出序列**
========================在计算机科学中,栈是一种线性数据结构,它遵循后进先出的原则。栈的压入和弹出操作是栈的基本操作。

**问题描述**
-------------

给定一个整数数组 `pushA` 和 `popA`,其中 `pushA[i]` 表示在栈中压入一个元素,而 `popA[i]` 表示从栈中弹出一个元素。请你判断这两个序列是否相等。

**示例**
--------

* 输入:`pushA = [1,2,3,4,5], popA = [4,5,3,2,1]`
输出:`true`

* 输入:`pushA = [1,2,3,4,5], popA = [4,3,5,1,2]`
输出:`false`

**解决方案**
-------------

我们可以使用一个栈来模拟压入和弹出操作。每当我们压入一个元素时,我们将其添加到栈顶;每当我们弹出一个元素时,我们从栈顶取出一个元素。

cppclass Solution {
public:
 bool validateStackSequences(vector<int>& pushed, vector<int>& popped) {
 int n = pushed.size();
 stack<int> s;
 int i =0; // 弹出序列的指针 for (int x : pushed) { // 压入序列的指针 while (!s.empty() && s.top() == popped[i]) {
 s.pop(); // 如果栈顶元素与弹出序列当前元素匹配,则弹出该元素 i++; // 移动弹出序列指针 }
 s.push(x); // 压入一个新元素到栈中 }
 return s.empty(); // 检查栈是否为空,表示压入和弹出序列相等 }
};


**注释**
--------

* 我们使用一个栈 `s` 来模拟压入和弹出操作。
* 每当我们压入一个元素时,我们将其添加到栈顶。
* 每当我们弹出一个元素时,我们从栈顶取出一个元素,并移动弹出序列指针 `i`。
* 如果栈为空,则表示压入和弹出序列相等。

**测试**
--------

cppint main() {
 Solution solution;
 vector<int> pushed = {1,2,3,4,5};
 vector<int> popped = {4,5,3,2,1};
 cout << boolalpha << solution.validateStackSequences(pushed, popped) << endl; // true pushed = {1,2,3,4,5};
 popped = {4,3,5,1,2};
 cout << boolalpha << solution.validateStackSequences(pushed, popped) << endl; // false return0;
}


**总结**
--------

本文介绍了栈的压入、弹出序列问题,并提供了一个解决方案。该解决方案使用一个栈来模拟压入和弹出操作,每当我们压入或弹出一个元素时,我们将其添加到或从栈顶取出。最终,检查栈是否为空即可确定压入和弹出序列是否相等。

其他信息

其他资源

Top