对于一个栈,已知入栈顺序为1,2,3,4,…,n,若希望出栈顺序为a1,a2,a3,…,an,请判断可能吗?输出Yes或No 输入输出格式 输入格式 输入第一行为正整数n,n<=100000。第二行为a1,a2,…,an,是某种出栈的排列顺序。 输出格式 输出Yes或No
时间: 2024-02-29 13:51:18 浏览: 105
这是一个经典的栈的问题 - 判断一个出栈序列是否合法。可以使用一个辅助栈来模拟栈的入栈和出栈操作,具体思路如下:
1. 依次遍历出栈序列中的每个元素。
2. 对于每个元素,如果它在辅助栈的栈顶,则将该元素出栈;否则将 1,2,...,n 中尚未入栈的元素入栈,直到该元素入栈为止。
3. 如果辅助栈为空,则该出栈序列是合法的;否则该出栈序列是非法的。
以下是一个 C++ 实现:
```c++
#include <iostream>
#include <stack>
using namespace std;
int main()
{
int n;
cin >> n;
int a[n];
for(int i = 0; i < n; i++)
{
cin >> a[i];
}
stack<int> s;
int j = 0;
for(int i = 1; i <= n; i++)
{
s.push(i);
while(!s.empty() && s.top() == a[j])
{
s.pop();
j++;
}
}
if(s.empty())
{
cout << "Yes";
}
else
{
cout << "No";
}
return 0;
}
```
该程序首先读取出栈序列,然后使用一个辅助栈来模拟栈的入栈和出栈操作。最后,如果辅助栈为空,则输出 Yes,否则输出 No。
阅读全文