判断出栈序列的合法性
题目
分析
用栈暂存元素
用队列存储目的序列
向栈中存放元素(从1 开始 )
对比队头元素和栈顶的元素
相等的话栈顶元素出栈,队头元素出队,继续比较
不等的话向栈中push元素,直到有相等的元素出现
结束条件:栈满,队空,待入栈的数大于n
代码
#include <iostream>
#include <stack>
#include <queue>
using namespace std;
//对比队头元素和栈顶的元素
//相等的话栈顶元素出栈,队头元素出队,继续比较
//不等的话向栈中push元素
//结束条件:栈满,队空,待入栈的数大于n
int main(){
int n;
cin>>n;
queue<int> q;
stack<int> s;
int x;
while (!q.empty()){
q.pop();
}
while (!s.empty())
{
s.pop();
}
//清空
for (int i = 0; i < n; i++)
{
cin>>x;
q.push(x);
//把目标顺序存入队列
}
int y=1;
while (!q.empty() )
{
s.push(y);
y++;
while (!s.empty() && !q.empty() && q.front()==s.top() )
{
q.pop();
s.pop();
/* code */
}
if(y==n+1){
break;
}
}
cout<<"q:"<<q.empty()<<endl<<"s:"<<s.empty()<<endl;
if(s.empty()&&q.empty()){
cout<<"YES"<<endl;
}
else{
cout<<"NO"<<endl;
}
}