08-数据结构阶段复习一
题目描述
双向队列只能在队尾和队头做出队,入队的操作。
现在给你一系列的操作,请输出最后队列的状态。
命令格式:
LIN X X表示一个整数,命令代表队头进队操作;
RIN X 表示X队尾进队操作;
ROUT 表示队尾删除一个元素的操作,当队列为空时,命令不合法;
LOUT 表示队头删除一个元素的操作,当队列为空时,命令不合法。
输入
第一行包含一个整数M(M<=10000),表示有M个操作;
以下M行每行包含一条命令;
命令可能不合法,对于不合法的命令,请在输出中处理
输出
输出的第一行包含队列进行了M次操作后的状态,从左往右输出,每两个之间用空格隔开,最后也有空格;若队列为空,输出EMPTY。
以下若干行处理不合法的命令(如果存在);
对于每一条不合法的命令,请输出一行X ERROR
其中X表示是第几条命令
输入样例
8
LIN 5
RIN 6
LIN 3
LOUT
ROUT
ROUT
ROUT
LIN 3
3
7 ERROR
#include<iostream>
using namespace std;
int main()
{
int i,j,data,m;
int sum=0,sumb=0;
string c;
cin>>m;
int a[m],b[m];
for(i=0;i<m;i++)
{
cin>>c;
if(c=="LIN")//对头插入
{
cin>>data;
if(i==0||sum==0)
a[sum]=data;
else
{
for(j=i;j>0;j--)
a[j]=a[j-1];
a[0]=data;
}
sum++;
}
else if(c=="RIN")//队尾插入
{
cin>>data;
a[sum]=data;
sum++;
}
else if(c=="ROUT")//队尾删除
{
if(i>0&&sum==0)//非法
{
b[sumb]=i+1;//第i+1条命令
sumb++;
}
else
sum--;
}
else if(c=="LOUT")//队头删除
{
if(i>0&&sum==0)//非法
{
b[sumb]=i+1;
sumb++;
}
else
{
sum--;
for(j=0;j<sum;j++)
a[j]=a[j+1];
}
}
}
if(sum==0)
cout<<"EMPTY"<<endl;
for(i=0;i<sum;i++)
{
if(i==sum-1)
cout<<a[i]<<" "<<endl;
else
cout<<a[i]<<" ";
}
if(sumb!=0)
for(i=0;i<sumb;i++)
cout<<b[i]<<" "<<"ERROR"<<endl;
return 0;
}