#include <iostream>
using namespace std;
#define MAXSIZE 100
typedef struct
{
int *base;
int front;
int rear;
}SqQueue;
int InitQueue(SqQueue &Q)
{
Q.base=new int[MAXSIZE];
if(!Q.base)return 0;
Q.front=Q.rear=0;
return 1;
}
int EnQueue(SqQueue &Q,int e)
{
if(Q.rear==(Q.front-1+MAXSIZE)%MAXSIZE) return 0;
Q.base[Q.front]=e;
Q.front=(Q.front-1+MAXSIZE)%MAXSIZE;
return 1;
}
int DeQueue(SqQueue &Q,int &e)//&
{
if(Q.front==Q.rear) return 0;
e=Q.base[Q.rear];
Q.rear=(Q.rear-1+MAXSIZE)%MAXSIZE;
return 1;
}
int IsEmpty(SqQueue &Q)
{
if(Q.front==Q.rear) return 0;
else return 1;
}
int main()
{
int n,m;int a=0,b=0;
while(1)
{
cin>>n;m=n;
if(n==0) break;
SqQueue Q;
InitQueue(Q);
while(n!=0)
{
cin>>a;
EnQueue(Q,a);
n--;
}
while(m!=0)
{
DeQueue(Q,b);
cout<<b;
if(m!=1)cout<<" ";
m--;
}
//cout<<IsEmpty(Q);
cout<<endl;
}
}
描述
如果允许在循环队列的两端都可以进行插入和删除操作。构造一个循环队列,实现从队头入队,从队尾出队并输出。约定从队头入队时向下标小的方向发展,从队尾入队时则向下标大的方向发展。
输入
多组数据,每组数据有两行。第一行为一个整数n,n表示入队序列A的长度(n个数依次连续入队,中间没有出队的情况),第二行为序列A(空格分隔的n个整数)。当n等于0时,输入结束。
输出
对应每组数据输出一行。依次输出队列中所有的整数,每两个整数之间用空格分隔。
输入样例 1
5 1 2 3 4 5 2 1 4 0
输出样例 1
1 2 3 4 5 1 4
原博地址
https://blog.csdn.net/weixin_43673589