循环队列(顺序队列)

#include<iostream>
#include<malloc.h>
#define MAXSIZE  50
using namespace std;

typedef int DataType;
typedef struct{
	DataType data[MAXSIZE];
	int front,rear;    //队头和队尾指针
}SeqQueue,* PSeqQueue;

int main(){
	/*函数声明*/		
	PSeqQueue Init_SeqQueue(void);				/*循环队列初始化*/
	int Empty_SeqQueue(PSeqQueue Q);			/*判断队空*/
	void In_SeqQueue(PSeqQueue Q,DataType x);	/*入队*/
	void Out_SeqQueue(PSeqQueue Q,DataType * y);/*出队*/
	int Front_SeqQueue(PSeqQueue Q);			/*读队头元素*/
	void Destory_SeqQueue(PSeqQueue * Q);		/*销毁队列*/
	void Creat_SeqQueue(PSeqQueue Q);			/*建非空队列*/
	void Show_SeqQueue(PSeqQueue Q);			/*输出队列*/

	PSeqQueue Q=Init_SeqQueue();
	cout<<"创建一个循环队列,请输入队列元素(最多"<<MAXSIZE<<"个),以负数结束:";
	Creat_SeqQueue(Q);
	Show_SeqQueue(Q);

	DataType x;
	cout<<"\n\n请输入要入队的元素值:";
	cin>>x;
	In_SeqQueue(Q,x);
	Show_SeqQueue(Q);

	DataType y;
	Out_SeqQueue(Q,&y);
	cout<<"\n\n删除的队头元素值为:"<<y<<endl;
	Show_SeqQueue(Q);

	cout<<"\n\n队头元素值为:"<<Front_SeqQueue(Q);
	
	Destory_SeqQueue(&Q);
	return 0;
}

/*循环队列初始化*/
PSeqQueue Init_SeqQueue(void){
	PSeqQueue Q;
	Q=(PSeqQueue)malloc(sizeof(SeqQueue));
	if(Q){
		Q->front=0;
		Q->rear=0;
	}
	return Q;
}

/*判断队空*/
int Empty_SeqQueue(PSeqQueue Q){
	if(Q && Q->front==Q->rear)
		return 1;
	else 
		return 0;
}

/*入队*/
void In_SeqQueue(PSeqQueue Q,DataType x){
	if(Q->front == (Q->rear+1)%MAXSIZE){
		cout<<"队满不能入队!";
		return;
	}else{
		Q->rear=(Q->rear+1)%MAXSIZE;
		Q->data[Q->rear]=x;
	}
}

/*出队*/
void Out_SeqQueue(PSeqQueue Q,DataType * y){
	if(Empty_SeqQueue(Q)){
		cout<<"队空不能出队!";
		return;
	}else{
		Q->front=(Q->front+1)%MAXSIZE;
		* y=Q->data[Q->front];
	}
}

/*读队头元素*/
int Front_SeqQueue(PSeqQueue Q){
	if(Empty_SeqQueue(Q)){
		cout<<"队空!";
		return -1;
	}
	else
		return Q->data[(Q->front+1)%MAXSIZE];
}

/*销毁队列*/
void Destory_SeqQueue(PSeqQueue * Q){
	if(* Q)
		free(* Q);
	* Q=NULL;
}

/*建非空队列*/
void Creat_SeqQueue(PSeqQueue Q){
	DataType x;
	while(cin>>x){
		if(x>=0)
			In_SeqQueue(Q,x);
		else
			break;
	}
}

/*输出队列*/
void Show_SeqQueue(PSeqQueue Q){
	cout<<"输出循环队列为:";
	int p = Q->front+1;	//第一个元素索引值
	while(p <= Q->rear){	//循环输出,直到队尾
		cout<<Q->data[p]<<" ";
		p++;
	}
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值