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

#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
发布了100 篇原创文章 · 获赞 4 · 访问量 3683

猜你喜欢

转载自blog.csdn.net/weixin_43673589/article/details/104391982