重点:stack和queue
1.先检查两个队列头是否相等,若不等,检查出队列头和栈头是否相等,若不等,检查入队列是否为空,若非空入栈,否则跳出循环
2.每次访问入队列和栈首元素时,注意其是否存在;
实现代码:
#include <iostream>
#include <queue>
#include <stack>
#include <stdio.h>
using namespace std;
int main()
{
int n;
freopen("test.in","r",stdin);
while(cin >> n){
queue<int> in;
queue<int> out;
for(int i=0 ; i<n ;i++){
int temp;
cin >> temp;
out.push(temp);
in.push(i+1);
}
stack<int> fac;
while(out.size() != 0){
if(in.size()!= 0 && in.front() == out.front()){
out.pop();
in.pop();
}
else if(fac.size()!=0 && fac.top()==out.front()){
fac.pop();
out.pop();
}
else if(in.size()!=0){
fac.push(in.front());
in.pop();
}
else{
break;
}
}
// fac.push(in.front());
// in.pop();
// while(out.size() != 0){
//// cout << out.front() << " " <<fac.top()<< endl;
// while(out.front()!=fac.top()){
//
// fac.push(in.front());
// in.pop();
// }
// if(out.front() == fac.top()){
// fac.pop();
// out.pop();
// if(fac.size() == 0){
// if(in.size() == 0){
// break;
// }
// fac.push(in.front());
// in.pop();
// }
// }
// else{
// break;
// }
//
//// cout << out.front() << " " <<fac.top()<< endl;
//
// }
if(out.size() == 0){
cout << "Yes" << endl;
}
else{
cout << "No" << endl;
}
}
return 0;
}
注释部分为最开始时写的代码,每次先入栈再匹配,相对来说麻烦,中间有的地方没检查队列和栈是否为空。