zoukankan      html  css  js  c++  java
  • 双向队列 SDUT 1466

    题目描述
          想想双向链表……双向队列的定义差不多,也就是说一个队列的队尾同时也是队首;两头都可以做出队,入队的操作。
    现在给你一系列的操作,请输出最后队列的状态;
    命令格式:
    LIN X  X表示一个整数,命令代表左边进队操作;
    RIN X  表示右边进队操作;
    ROUT
    LOUT   表示出队操作;

    输入
    第一行包含一个整数M(M<=10000),表示有M个操作;
    以下M行每行包含一条命令;
    命令可能不合法,对于不合法的命令,请在输出中处理;

    输出
    输出的第一行包含队列进行了M次操作后的状态,从左往右输出,每两个之间用空格隔开;
    以下若干行处理不合法的命令(如果存在);
    对于不合法的命令,请输出一行X ERROR
    其中X表示是第几条命令;

    示例输入
    8
    LIN 5
    RIN 6
    LIN 3
    LOUT
    ROUT
    ROUT
    ROUT
    LIN 3
    示例输出
    3
    7 ERROR

    运用数组模拟双向队列,由于给出的数据范围是10000,因此可以在10000作为左右队列的分界线

     1 #include<stdio.h>
     2 #include<string.h>
     3 int main()
     4 {
     5     int n;
     6     scanf("%d",&n);
     7     char a[100];
     8     int num[100100];
     9     int qwe[10010];
    10     int e1=10050;
    11     int e2=10050;
    12     int flog=0;
    13     int p;
    14     for(int i=1; i<=n; i++)
    15     {
    16         scanf("%s",a);
    17         if(strcmp(a,"LIN")==0)
    18         {
    19             scanf("%d",&p);
    20             num[e1--]=p;
    21         }
    22         else if(strcmp(a,"RIN")==0)
    23         {
    24             scanf("%d",&p);
    25             num[++e2]=p;
    26         }
    27         else if(strcmp(a,"LOUT")==0)
    28         {
    29             if(e1>=e2)//说明没有数了
    30             {
    31                 qwe[flog++]=i;//出现不满足的情况
    32                 e1=10050;//恢复原值
    33                 e2=10050;//恢复原值
    34             }
    35             else
    36             {
    37                 e1++;
    38             }
    39         }
    40         else
    41         {
    42             if(strcmp(a,"ROUT")==0)
    43             {
    44                 if(e1>=e2)
    45                 {
    46                     qwe[flog++]=i;
    47                     e1=10050;
    48                     e2=10050;
    49                 }
    50                 else
    51                 {
    52                     e2--;
    53                 }
    54             }
    55         }
    56     }
    57     if(e1<e2)
    58     {
    59         for(int i=e1+1; i<=e2; i++)
    60         {
    61             if(i==e2)
    62                 printf("%d
    ",num[i]);
    63             else
    64             {
    65                 printf("%d ",num[i]);
    66             }
    67         }
    68     }
    69     for(int i=0; i<flog; i++)
    70     {
    71         printf("%d ERROR
    ",qwe[i]);
    72     }
    73     return 0;
    74 }
  • 相关阅读:
    《大道至简》读后感
    论校园跑腿软件的体验
    php学习
    小资料:管理学中的几种分析方法
    SQL Server 连接失败(转自http://7880.com/Info/Article116a9e40.html)
    无法打开项目文件:Visual Studio .net
    ASP.NET设计网络硬盘之下载或在线查看 (转)
    upload file to sql
    转自thinhunan 应用WEB标准进行网站设计--《网站重构》读书笔记
    关于轻量级权限控制的实现(转自登峰之道)
  • 原文地址:https://www.cnblogs.com/xiaolitongxueyaoshangjin/p/12373809.html
Copyright © 2011-2022 走看看