给定一组入栈顺序和一组待定的出栈结果,要求判断出栈结果在给定的入栈顺序下是否可能。 输入格式: 第一行:输入整数n,表示栈的大小。 第二行:入栈顺序 第三行:待验证出栈结果。 输出格式: 判断是否可能。用c++来编写
时间: 2024-02-12 16:09:35 浏览: 114
给定进栈顺序,判断一个序列是否为正确的出栈顺序
4星 · 用户满意度95%
以下是使用C++编写的代码,用于判断给定的出栈结果是否可能:
```cpp
#include <iostream>
#include <stack>
#include <vector>
using namespace std;
int main() {
int n;
cin >> n;
vector<int> in(n);
for (int i = 0; i < n; i++) {
cin >> in[i];
}
vector<int> out(n);
for (int i = 0; i < n; i++) {
cin >> out[i];
}
stack<int> s;
int i = 0;
for (int j = 0; j < n; j++) {
// 将入栈元素依次压入栈中
s.push(in[j]);
// 如果栈顶元素和待出栈序列当前位置的元素相同,就弹出栈顶元素
while (!s.empty() && s.top() == out[i]) {
s.pop();
i++;
}
}
if (s.empty()) {
cout << "Possible" << endl;
} else {
cout << "Impossible" << endl;
}
return 0;
}
```
首先,我们读入栈的大小n、入栈顺序和待验证的出栈结果。然后,我们使用一个栈s来模拟入栈和出栈的过程。
我们按照入栈顺序将元素依次压入栈中,并检查栈顶元素是否应该弹出。如果栈顶元素和待出栈序列当前位置的元素相同,就弹出栈顶元素并继续检查下一个位置。
最后,如果栈s为空,则说明给定的出栈结果是可能的;否则,说明出栈结果不可能在给定的入栈顺序下出现。
希望可以帮助你解决问题!
阅读全文