题目描述:
说明
想想双向链表……双向队列的定义差点儿相同,也就是说一个队列的队尾同一时候也是队首。两头都能够做出队,入队的操作。
如今给你一系列的操作。请输出最后队列的状态;
命令格式:
LIN X X表示一个整数,命令代表左边进队操作;
RIN X 表示右边进队操作;
ROUT 表示右边出队操作;
LOUT 表示从左边出队操作。
输入格式
第一行包括一个整数M(M<=10000),表示有M个操作;
下面M行每行包括一条命令;
命令可能不合法,对于不合法的命令,请在输出中处理;
输出格式
输出的第一行包括队列进行了M次操作后的状态。从左往右输出,每两个之间用空格隔开。
下面若干行处理不合法的命令(假设存在);
对于不合法的命令。请输出一行X ERROR
当中X表示是第几条命令;
样例
输出数据 1
3
7 ERROR
输入数据 1
8
LIN 5
RIN 6
LIN 3
LOUT
ROUT
ROUT
ROUT
LIN 3
#include<bits/stdc++.h>
using namespace std;
int main()
{
deque<int>deq;
int i,n,j=0;
int a[10000];
cin>>n;
string s;
for(int i=1;i<=n;i++)
{
cin>>s;
if(s=="LIN")
{
int x;
cin>>x;
deq.push_front(x);
}
if(s=="RIN")
{
int x;
cin>>x;
deq.push_back(x);
}
if(s=="LOUT")
{
if(!deq.empty())
{
deq.pop_front();
}
else a[j++]=i;
}
if(s=="ROUT")
{
if(!deq.empty())
{
deq.pop_back();
}
else a[j++]=i;
}
}
while(!deq.empty())
{
cout<<deq.front()<<" ";//输出第一元素
deq.pop_front();
}
printf("\n");
for(i=0;i<j;i++)
{
printf("%d ERROR\n",a[i]);
}
return 0;
}
deq[ ]:用来访问双向队列中单个的元素。
deq.front():返回第一个元素的引用。
deq.back():返回最后一个元素的引用。
deq.push_front(x):把元素x插入到双向队列的头部。
deq.pop_front():弹出双向队列的第一个元素。
deq.push_back(x):把元素x插入到双向队列的尾部。
deq.pop_back():弹出双向队列的最后一个元素。