栈与队列问题:双向队列

 

双向队列

Time Limit: 1000MS Memory limit: 65536K

题目描述

      想想双向链表……双向队列的定义差不多,也就是说一个队列的队尾同时也是队首;两头都可以做出队,入队的操作。
现在给你一系列的操作,请输出最后队列的状态;
命令格式:
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


 1 #include<stdio.h>

 2 #include<string.h>

 3 #include<stdlib.h>

 4 int main()

 5 {

 6     int f[100000];

 7     int i,j;

 8     int n;

 9     int sum=0,s=0;

10     int gh[100000]={-1};

11     scanf("%d",&n);

12     for(j=1;j<=n;j++)

13     {

14         char g[20];

15 

16         scanf("%s",g);

17         if(strcmp(g,"LIN")==0)

18         {

19             int x;

20             scanf("%d",&x);

21             if(sum==0)

22             f[sum]=x;

23             else

24             {

25             for(i=sum;i>=1;i--)

26             f[i]=f[i-1];

27             f[0]=x;

28             }

29             sum++;

30         }

31         if(strcmp(g,"RIN")==0)

32         {

33             int x;

34             scanf("%d",&x);

35             f[sum]=x;

36             sum++;

37         }

38         if(strcmp(g,"LOUT")==0)

39         {

40             if(sum==1)sum=0;

41             else if(sum==0)

42             {

43                 gh[s]=j;

44                 s++;

45             }

46             else

47             {

48             for(i=0;i<=sum-2;i++)

49             f[i]=f[i+1];

50             sum=sum-1;

51             }

52         }

53         if(strcmp(g,"ROUT")==0)

54         {

55             if(sum==0)

56             {

57                 gh[s]=j;

58                 s++;

59             }

60             else sum=sum-1;

61         }

62     }

63     for(i=0;i<=sum-1;i++)

64     if(i==sum-1)printf("%d\n",f[i]);

65     else printf("%d ",f[i]);

66     for(i=0;i<=s-1;i++)

67     if(gh[i]!=-1)printf("%d ERROR\n",gh[i]);

68     return 0;

69 }
View Code

 

你可能感兴趣的:(队列)