雙向隊列

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 }
相關文章
相關標籤/搜索