#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++;
}
}