题目描述
想想双向链表……双向队列的定义差不多,也就是说一个队列的队尾同时也是队首;两头都可以做出队,入队的操作。现在给你一系列的操作,请输出最后队列的状态;命令格式:LIN X X表示一个整数,命令代表左边进队操作;RIN X 表示右边进队操作;ROUTLOUT 表示出队操作;
输入
第一行包含一个整数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<cstdio>
2 #include<iostream>
3 #include<
string.h>
4 #include<queue>
5 using namespace std;
6
7 int main()
8 {
9 int n,wrong[
101],c,x;
10 char s[
10];
11 deque<
int>
dque;
12 c =
0;
13 scanf(
"%d",&
n);
14 for(
int i =
1; i <= n; i++
)
15 {
16 scanf(
"%s",s);
17 if(strcmp(s,
"LIN") ==
0)
18 {
19 scanf(
"%d",&
x);
20 dque.push_front(x);
21 }
22 else if(strcmp(s,
"RIN") ==
0)
23 {
24 scanf(
"%d",&
x);
25 dque.push_back(x);
26 }
27 else if(strcmp(s,
"LOUT") ==
0)
28 {
29 if(dque.empty())
30 {
31 wrong[c++] =
i;
32 continue;
33 }
34 else
35 {
36 dque.pop_front();
37 }
38 }
39 else if(strcmp(s,
"ROUT") ==
0)
40 {
41 if(dque.empty())
42 {
43 wrong[c++] =
i;
44 continue;
45 }
46 else
47 {
48 dque.pop_back();
49 }
50 }
51 }
52 printf(
"%d",dque.front());
53 dque.pop_front();
54 while(!
dque.empty())
55 {
56 printf(
" %d",dque.front());
57 dque.pop_front();
58 }
59 printf(
"\n");
60 for(
int i =
0; i < c; i++
)
61 {
62 printf(
"%d ERROR\n",wrong[i]);
63 }
64
65 return 0;
66 }
View Code
转载于:https://www.cnblogs.com/LK1994/p/3150094.html
相关资源:双向队列实现