Description
想一想雙向鏈表……雙向隊列的定義差很少,也就是說一個隊列的隊尾同時也是隊首;兩頭均可以作出隊,入隊的操做。
如今給你一系列的操做,請輸出最後隊列的狀態;
命令格式:
LIN X X表示一個整數,命令表明左邊進隊操做;
RIN X 表示右邊進隊操做;
ROUT
LOUT 表示出隊操做;spa
Input
第一行包含一個整數M(M<=10000),表示有M個操做;
如下M行每行包含一條命令;
命令可能不合法,對於不合法的命令,請在輸出中處理;code
Output
輸出的第一行包含隊列進行了M次操做後的狀態,從左往右輸出,每兩個之間用空格隔開;
如下若干行處理不合法的命令(若是存在);
對於不合法的命令,請輸出一行X ERROR
其中X表示是第幾條命令;blog
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 }