雙向隊列


Description
想想雙向鏈表……雙向隊列的定義差不多,也就是說一個隊列的隊尾同時也是隊首;兩頭都可以做出隊,入隊的操作。
現在給你一系列的操作,請輸出最后隊列的狀態;
命令格式:
LIN X X表示一個整數,命令代表左邊進隊操作;
RIN X 表示右邊進隊操作;
ROUT
LOUT 表示出隊操作;

Input
第一行包含一個整數M(M<=10000),表示有M個操作;
以下M行每行包含一條命令;
命令可能不合法,對於不合法的命令,請在輸出中處理;

Output
輸出的第一行包含隊列進行了M次操作后的狀態,從左往右輸出,每兩個之間用空格隔開;
以下若干行處理不合法的命令(如果存在);
對於不合法的命令,請輸出一行X ERROR
其中X表示是第幾條命令;

Sample Input
8
LIN 5
RIN 6
LIN 3
LOUT
ROUT
ROUT
ROUT
LIN 3
Sample Output
3
7 ERROR

 

 1 #include<stdio.h>
 2 #include<deque>
 3 #include<string.h>
 4 using namespace std;
 5 int main()
 6 {
 7     deque<int>q;
 8     int t,i,j,k[100],count,a;
 9     char x[20];
10     scanf("%d",&t);
11     count=0;
12     j=0;
13     while(t--)
14     {
15         scanf("%s",x);
16         if(strcmp(x,"LIN")==0)
17         {
18             scanf("%d",&a);
19             q.push_front(a);
20             count++;
21         }
22         if(strcmp("RIN",x)==0)
23         {
24             scanf("%d",&a);
25             q.push_back(a);
26             count++;
27         }
28         if(strcmp("LOUT",x)==0)
29         {
30             count++;
31             if(q.size()==0)
32                 k[j++]=count;
33             else
34             {
35                 q.pop_front();
36             }
37         }
38         if(strcmp("ROUT",x)==0)
39         {
40            count++;
41             if(q.size()==0)
42                 k[j++]=count;
43             else
44             {
45                 q.pop_back();
46             }
47         }
48     }
49     for(i=0;i<q.size();i++)
50     {
51         a=q.front();
52         printf("%d ",a);
53         q.pop_front();
54         q.push_back(a);
55     }
56     printf("\n");
57     for(i=0;i<j;i++)
58     {
59         printf("%d ERROR\n",k[i]);
60     }
61     return 0;
62 }

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM