栈的应用
栈在数据结构中是一个很重要的东西,掌握了栈的使用很多问题都可以很简单的解决。
栈使用的原则是 “后进先出” 。
栈就相当于一个瓶子我们往里面放东西,我们要将我们放进去的东西一层叠一层,所以我们每次要取出来的时候只能取栈顶端的元素。
下面是一道很简单的一道题:
uva514 铁轨
我的思路是这就是一个判断出栈合法性的问题,出栈序列是否符合 “后进先出” 的原则
需要注意的点:
1)栈的应用
用A来代表车厢序号,B代表target数组用来表示列车出站的序号顺序。B用来表示已经驶进B的车辆数。用stacks表示C。
1.A中首元素 =B首元素,A直接驶入B;
2.A中首元素!=B首元素,栈首元素==B首元素,栈中首元素出栈;
3.A中首元素!=B首元素,栈首元素!=B首元素,A中元素个数>0,A中元素进入栈;
4.A中首元素!=B首元素,栈首元素!=B首元素,A中元素个数<=0,该解不成立。
2)输入输出的形式奇特,需要多加注意。
代码:
#include<bits/stdc++.h>
using namespace std;
const int MAXN = 1000+10;
int n,target[MAXN];
int main(){
while(scanf("%d",&n)==1){
stack<int> s;
int A=1,B=1;
for(int i=1;i<=n;i++){
scanf("%d",&target[i]);
}
int ok=1;
while(B<=n){
if(A==target[B]){
A++;
B++;
}
else if(!s.empty()&&s.top()==target[B]){
s.pop();
B++;
}
else if(A<=n){
s.push(A++);
}
else{
ok=0;
break;
}
}
printf("%s\n",ok?"Yes":"No");
}
return 0;
}