栈的应用

栈在数据结构中是一个很重要的东西,掌握了栈的使用很多问题都可以很简单的解决。
栈使用的原则是 “后进先出” 。
栈就相当于一个瓶子我们往里面放东西,我们要将我们放进去的东西一层叠一层,所以我们每次要取出来的时候只能取栈顶端的元素。

下面是一道很简单的一道题:
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;
} 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值