双向队列

题目链接

题解:由于本题考的是双向队列,所以应该采用从中间向两侧建立数组存数据的方法。其中"LOUT""ROUT"的处理方法非常的巧妙。
易错:1.由于本人个人习惯用a[]去存储字符串,导致用了一个int a[]一个char a[],所以建议大家若果是字符串的话尽量去用 char s[].
2.本题所给的样例中最后是只剩了一个数据,但是其他测试数据,未必如此,所以要注意输出的形式。

 #include<bits/stdc++.h>
  using namespace std;
  int main()
  {
      int n;
      scanf("%d",&n);
      int x,l,r,t,i;
      char s[20002];
      int d[20002],a[20002];
      l=10000;r=l+1;t=0;
      for(i=1;i<=n;i++)
      {
          scanf("%s",s);
          if(strcmp(s,"LIN")==0)
          {
              scanf("%d",&x);
              a[l--]=x;
          }
          if(strcmp(s,"RIN")==0)
          {
              scanf("%d",&x);
              a[r++]=x;
          }
          if(strcmp(s,"LOUT")==0)
          {
              l++;
              if(l==r)
              {
                  d[++t]=i;
                  l--;
              }
          }
          if(strcmp(s,"ROUT")==0)
          {
              r--;
              if(l==r)
              {
                  d[++t]=i;
                  r++;
              }
          }
      }
      for(i=l+1;i<r-1;i++)
      {
          printf("%d ",a[i]);
      }
      printf("%d\n",a[r-1]);
      for(i=1;i<=t;i++)
      {
          printf("%d ERROR\n",d[i]);
      }
      return 0;
  }

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值