循环队列基本操作实现(C++)
注意:
*bool queue_empty(seqqueue Q)与void init_queue(seqqueue *Q)取值的区别
#include "stdafx.h"
#include <iostream>
#include <malloc.h>
using namespace std;
#define maxsize 10
typedef struct
{
int data[maxsize];
int front,rear;
}seqqueue;
void init_queue(seqqueue *Q);
bool queue_empty(seqqueue Q);
bool queue_full(seqqueue Q);
bool queue_front(seqqueue *Q,int *x);
bool Enqueue(seqqueue *Q,int x);
bool Outqueue(seqqueue *Q,int *x);
int main()
{
int i,*x,y;
int int_x;
x=&int_x;
seqqueue *Q=(seqqueue *)malloc(sizeof(seqqueue));
init_queue(Q);
cout<<"\n输入要进行的操作:1.取队头元素 2.入队 3.出队 0.结束";
cin>>i;
while(i!=0)
{
if(i==1)
{//1.取队头元素,显示
if(queue_front(Q,x))
cout<<"\n取队头元素操作成功,值为:"<<*x;
else cout<<"\n取队头元素操作失败";
}
if(i==2)
{//1.键盘输入一个整数,入队
cout<<"\n输入 入队值:";
cin>>y;
if(Enqueue(Q,y))
cout<<"\n入队操作成功, 其值为:"<<y;
else cout<<"\n入队操作失败";
}
if(i==3)
{//1.出队,显示
if(Outqueue(Q,x))
cout<<"\n出队操作成功, 其值为:"<<*x;
else cout<<"\n出队操作失败";
}
cout<<"\n输入要进行的操作:1.取队头元素 2.入队 3.出队 0.结束";
cin>>i;
}
}
//实现各子函数
void init_queue(seqqueue *Q)
{
Q->front=0;
Q->rear=0;
}
bool queue_empty(seqqueue Q)
{
if(Q.front==Q.rear)return true;
else return false;
}
bool queue_full(seqqueue Q)
{
if((Q.rear+1)%maxsize==Q.front)return true;
else return false;
}
//取队列头,补全
bool queue_front(seqqueue *Q,int *x)
{
if(Q->front!=Q->rear)
{
Q->data[Q->front];
}return(true);
}
//入队,补全
bool Enqueue(seqqueue *Q,int x)
{
if((Q->rear+1) % maxsize == Q->front)
return 0;
else
{
Q->rear=(Q->rear+1)%maxsize;
Q->data[Q->rear]=x;
return(true);
}
}
//出队,补全
bool Outqueue(seqqueue *Q,int *x)
{
if(Q->rear == Q->front)
return(NULL);
else
{
Q->front=(Q->front+1) % maxsize;
*x=Q->data[Q->front];
}
return(true);
}
运行效果图: