这道题可以用双向链表来做,左边进队是逆序建链表,右边进队是顺序建链表。
#include <iostream>
#include <string>
#include <cstdlib>
using namespace std;
int f[10050];
struct node
{
int data;
struct node *next,*last;
}*head;
int main()
{
int n,i,num,e=0;
string st;
struct node *tail,*p,*q,*r;
head=NULL;
tail=NULL; //初始化;
cin>>n;
for(i=1;i<=n;i++)
{
cin>>st;
if(st=="LIN")
{
p=new node;
cin>>num;
p->data=num;
if(head)
{
p->next=head;
p->last=NULL;
head->last=p;
head=p;
}
else
{
p->next=NULL;
p->last=NULL;
head=p;
tail=p;
} //逆序建链表
}else if(st=="RIN")
{
p=new node;
cin>>num;
p->data=num;
if(tail)
{
p->next=NULL;
p->last=tail;
tail->next=p;
tail=p;
}else
{
p->next=NULL;
p->last=NULL;
head=p;
tail=p;
} //顺序建链表;
}else if(st=="LOUT")
{
q=head;
if(q)
{
r=q->next;
if(r)
{
r->last=NULL;
head=r; //若不止一个结点,删除头结点,头指针后移;
}else
{
head=NULL;
tail=NULL; //若只有头结点,删除后都置为空;
}
}else //记录不合法位置;
f[e++]=i;
}else if(st=="ROUT")
{
q=tail;
if(q)
{
r=q->last;
if(r)
{
r->next=NULL;
tail=r;
}else
{
head=NULL;
tail=NULL;
} //从右边删除;
}else
f[e++]=i;
}
}
p=head;
while(p)
{
if(p->next)
cout<<p->data<<" ";
else
cout<<p->data<<endl;
p=p->next;
}
for(i=0;i<e;i++)
cout<<f[i]<<" "<<"ERROR"<<endl;
return 0;
}