双向队列

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 }
相关文章
相关标签/搜索