#include <stdio.h>
#include <stdlib.h>
#include <string.h>
typedef struct node
{
int data;
node *next;
}*qtype;
typedef struct
{
qtype front,rear;
}que;
int QueInit(que &q) //初始化一个队列
{
q.front=q.rear=(qtype)malloc(sizeof(node));
q.front->next=NULL;
return 1;
}
void DesQue(que &q)
{
while(q.front)
{
q.rear=q.front->next;
free(q.front);
q.front=q.rear;
}
}
int InQuer(que &q,int e) //在队列右端插入
{
qtype p;
p=(qtype)malloc(sizeof(node));
p->data=e;p->next=NULL;
q.rear->next=p; q.rear=p;
return 1;
}
int InQuel(que &q,int e) //在队列左端插入
{
qtype p1,p2;
p1=(qtype)malloc(sizeof(node));
p1->data=e;
// if(q.front==q.rear) q.front->next=NULL;
p1->next=q.front->next;
q.front->next=p1;
p2=q.front;
while(p2->next)
{
p2=p2->next;
}
q.rear=p2;
}
int DelQuer(que &q) //右边删除
{
qtype p1,p2;
if(q.front==q.rear) return 0;
p2=q.front;
while(p2->next!=q.rear) //p2指向队尾的前一个元素
{
p2=p2->next;
}
p1=p2->next;
p2->next=p1->next;
q.rear=p2;
free(p1);
return 1;
}
int DelQuel(que &q) //左边删除
{
qtype p;
if(q.front==q.rear) return 0;
//若队列为空,返回0
p=q.front->next;
q.front->next=p->next;
if(q.rear==p) q.rear=q.front;
//若是最后一个元素,使尾指针指向头结点
free(p);
return 1;
}
int main()
{
que q;
QueInit(q);
int m,i,x,a[12000];
int j=0;
char c[10];
scanf("%d",&m);
for(i=1;i<=m;i++)
{
scanf("%s",c);
if(strcmp(c,"LIN")==0)
{
scanf("%d",&x);
InQuel(q,x);
}
if(strcmp(c,"RIN")==0)
{
scanf("%d",&x);
InQuer(q,x);
}
if(strcmp(c,"LOUT")==0)
{
if(q.front==q.rear)
a[j++]=i;
else DelQuel(q);
}
if(strcmp(c,"ROUT")==0)
{
if(q.front==q.rear)
a[j++]=i;
else DelQuer(q);
}
}// for
qtype p;
p=q.front->next;
while(p)
{
if(p->next)
printf("%d ",p->data);
else
printf("%d\n",p->data);
p=p->next;
}
if(j)
{
for(i=0;i<j;i++)
printf("%d ERROR\n",a[i]);
}
return 0;
}
#include <stdlib.h>
#include <string.h>
typedef struct node
{
int data;
node *next;
}*qtype;
typedef struct
{
qtype front,rear;
}que;
int QueInit(que &q) //初始化一个队列
{
q.front=q.rear=(qtype)malloc(sizeof(node));
q.front->next=NULL;
return 1;
}
void DesQue(que &q)
{
while(q.front)
{
q.rear=q.front->next;
free(q.front);
q.front=q.rear;
}
}
int InQuer(que &q,int e) //在队列右端插入
{
qtype p;
p=(qtype)malloc(sizeof(node));
p->data=e;p->next=NULL;
q.rear->next=p; q.rear=p;
return 1;
}
int InQuel(que &q,int e) //在队列左端插入
{
qtype p1,p2;
p1=(qtype)malloc(sizeof(node));
p1->data=e;
// if(q.front==q.rear) q.front->next=NULL;
p1->next=q.front->next;
q.front->next=p1;
p2=q.front;
while(p2->next)
{
p2=p2->next;
}
q.rear=p2;
}
int DelQuer(que &q) //右边删除
{
qtype p1,p2;
if(q.front==q.rear) return 0;
p2=q.front;
while(p2->next!=q.rear) //p2指向队尾的前一个元素
{
p2=p2->next;
}
p1=p2->next;
p2->next=p1->next;
q.rear=p2;
free(p1);
return 1;
}
int DelQuel(que &q) //左边删除
{
qtype p;
if(q.front==q.rear) return 0;
//若队列为空,返回0
p=q.front->next;
q.front->next=p->next;
if(q.rear==p) q.rear=q.front;
//若是最后一个元素,使尾指针指向头结点
free(p);
return 1;
}
int main()
{
que q;
QueInit(q);
int m,i,x,a[12000];
int j=0;
char c[10];
scanf("%d",&m);
for(i=1;i<=m;i++)
{
scanf("%s",c);
if(strcmp(c,"LIN")==0)
{
scanf("%d",&x);
InQuel(q,x);
}
if(strcmp(c,"RIN")==0)
{
scanf("%d",&x);
InQuer(q,x);
}
if(strcmp(c,"LOUT")==0)
{
if(q.front==q.rear)
a[j++]=i;
else DelQuel(q);
}
if(strcmp(c,"ROUT")==0)
{
if(q.front==q.rear)
a[j++]=i;
else DelQuer(q);
}
}// for
qtype p;
p=q.front->next;
while(p)
{
if(p->next)
printf("%d ",p->data);
else
printf("%d\n",p->data);
p=p->next;
}
if(j)
{
for(i=0;i<j;i++)
printf("%d ERROR\n",a[i]);
}
return 0;
}