给定一个初始为空的队列和一系列入队、出队操作,请编写程序输出每次出队的元素。队列的元素值均为整数。
输入格式:
输入第1行为1个正整数n,表示操作个数;接下来n行,每行表示一个操作,格式为1 d或0。1 d表示将整数d入队,0表示出队。n不超过20000。
输出格式:
按顺序输出每次出队的元素,每个元素一行。若某出队操作不合法(如在队列空时出队),则对该操作输出invalid。
c++语言实现
#include<iostream>
using namespace std;
#define OK 1
#define ERROR 0
#define OVERFLOW -1
#define MAXSIZE 20000
typedef int Status;
typedef struct
{
Status *base;
int front;
int rear;
}SqQueue;
Status InitQueue(SqQueue &Q)
{
Q.base=new Status[MAXSIZE];
if(!Q.base) exit(OVERFLOW);
Q.front=Q.rear=0;
return OK;
}
Status EnQueue(SqQueue &Q,Status e)
{
if((Q.rear+1)%MAXSIZE == Q.front)
return ERROR;
Q.base[Q.rear]=e;
Q.rear=(Q.rear+1)%MAXSIZE;
return OK;
}
Status DeQueue(SqQueue &Q,Status &e)
{
if(Q.rear==Q.front)
return ERROR;
e=Q.base[Q.front];
cout<<e<<endl;
Q.front=(Q.front+1)%MAXSIZE;
return OK;
}
int main()
{
int n,e,i,a,flag=1;
cin>>n;
SqQueue Q;
InitQueue (Q);
for(i=1;i<=n;i++)
{
cin>>a;
if(a==1)
{
cin>>e;
EnQueue(Q,e);
}
if(a==0)
{
flag=DeQueue(Q,e);
if(!flag)
cout<<"invalid"<<endl;
}
}
return 0;
}