循环队列基本操作实现(C++)

循环队列基本操作实现(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);

}

运行效果图:循环队列基本操作实现(C++)