给定一个初始为空的队(队存储空间长度为10)和一系列进队、出队操作,请编写程序输出经过这些操作后队中的元素。队中元素值均为整数。(采用循环队列完成,禁用一个空间方法)
输入格式:
输入第1行为1个正整数n,表示操作个数;
第2行为给出的n个整数,非0元素表示进队,且此非0值即为进队元素,0元素表示出队。
输出格式:
第一行按出队顺序输出所有元素,以一个空格隔开,如果队空时做出队操作会输出"EMP1TY",ru如果队满时做进队操作会输出"FULL"。
第二行中输出队中所有元素,以一个空格隔开。
末尾均有一个空格。
输入样例:
12
3 1 2 0 0 -1 0 0 0 4 5 0
输出样例:
3 1 2 -1 EMPTY 4
5
#include<iostream>
using namespace std;
#define ERROR 0
#define OK 1
#define MAXQSIZE 10
typedef int QElemType;
typedef int Status;
typedef struct{
QElemType *base;
int rear;
int front;
}SqQueue;
Status InitQueue(SqQueue &Q)
{
Q.base=new QElemType[MAXQSIZE];
if(!Q.base) return ERROR;
Q.front=Q.rear=0;
return OK;
}
Status EnQueue(SqQueue &Q,QElemType e){
if((Q.rear+1)%MAXQSIZE==Q.front)
return ERROR;
Q.base[Q.rear]=e;
Q.rear=(Q.rear+1)%MAXQSIZE;
return OK;
}
Status DeQueue(SqQueue &Q,QElemType &e)
{
if(Q.front==Q.rear)return ERROR;
e=Q.base[Q.front];
Q.front=(Q.front+1)%MAXQSIZE;
return OK;
}
Status IsEmpty(SqQueue &Q){
if(Q.front==Q.rear)return OK;
else{
return ERROR;
}
}
Status IsFull(SqQueue &Q){
if((Q.rear+1)%MAXQSIZE==Q.front){return OK;}
else{return ERROR;}
}
Status DestroyQueue(SqQueue &Q){
free(Q.base);
Q.base=0;
Q.front=0;
if(Q.base==0){
return OK;
}
else{
return ERROR;
}
}
int main(){
SqQueue Q;
int n,i,op,e;
InitQueue(Q);
cin>>n;
for(i=0;i<n;i++)
{
cin>>op;
if(op){
if(IsFull(Q))cout<<"FULL ";
else EnQueue(Q,op);
}else{
if(IsEmpty(Q))cout<<"EMPTY ";
else{
DeQueue(Q,e);
cout<< e<<" ";
}
}
}
cout.put('\n');
while(!IsEmpty(Q)){
DeQueue(Q,e);
cout<<e<<" ";
}
cout<<endl;
DestroyQueue(Q);
return 0;
}