BJFU_数据结构习题_248基于两端操作的循环队列的实现

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接: https://blog.csdn.net/weixin_43722827/article/details/102755404

248基于两端操作的循环队列的实现

描述
如果允许在循环队列的两端都可以进行插入和删除操作。构造一个循环队列,实现从队头入队,从队尾出队并输出。约定从队头入队时向下标小的方向发展,从队尾入队时则向下标大的方向发展。
输入
多组数据,每组数据有两行。第一行为一个整数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

#include<iostream>
using namespace std;
#define MAX 100
#define OK 0
#define OVERFLOW -1
#define ERROR -2
typedef struct
{
	int *base;
	int front;
  	int rear;
}SqQueue;
int InitQueue(SqQueue &Q)
{
	Q.base=new int[MAX];
	if(!Q.base) return OVERFLOW;
	Q.front=Q.rear=0;
	return OK;
}									
int EnQueue(SqQueue& Q,int e)
{
	if(Q.rear==(Q.front-1+MAX)%MAX)
		return ERROR;
	Q.base[Q.front]=e;
	Q.front=(Q.front-1+MAX)%MAX;
	return OK;
}
int DeQueue(SqQueue &Q)
{
	if(Q.front==Q.rear)
		return ERROR;
	int e=Q.base[Q.rear];
	Q.rear=(Q.rear-1+MAX)%MAX;
	return e;
}
int main()
{
	int n;
	while(cin>>n&&n!=0)
	{
		SqQueue Q;
		InitQueue(Q);
		for(int i=0;i<n;i++)
		{
			int x;cin>>x;
			EnQueue(Q,x);
		}
		for(int j=0;j<n-1;j++)
			cout<<DeQueue(Q)<<" ";
		cout<<DeQueue(Q)<<endl;
	}
	return 0;			
}

猜你喜欢

转载自blog.csdn.net/weixin_43722827/article/details/102755404
今日推荐