循環(huán)隊(duì)列是順序隊(duì)的一種,意在解決隊(duì)首和隊(duì)尾指針同同時(shí)等于MAXSIZE-1的時(shí)候,會(huì)發(fā)聲假上溢的情況,利用循環(huán)隊(duì)列解決了這個(gè)問(wèn)題
判斷是否隊(duì)空,則看rear=front==0
判斷是否隊(duì)滿(mǎn),則看(rear+1)%MAXSIZE==front
/*
* 學(xué)習(xí)時(shí)間:2018-10-11
* 學(xué)習(xí)內(nèi)容:數(shù)據(jù)結(jié)構(gòu)之循環(huán)隊(duì)列的實(shí)現(xiàn)
* 學(xué)習(xí)人:田超
* QQ:770925351
* Email:770925351@qq.com
* 開(kāi)發(fā)環(huán)境:Ubuntu 16.04 + CLion
* */
#include <stdio.h>
#define MAXSIZE 10
#define TRUE 1
#define ERROR 0
typedef struct SqQueue
{
int front; //隊(duì)首
int rear; //隊(duì)尾
int data[MAXSIZE]; //數(shù)據(jù)域
}SqQueue;
void initQueue(SqQueue &qu) //初始化隊(duì)
{
qu.front=qu.rear=0; //初始化隊(duì)首
}
int isQueueEmpty(SqQueue qu) //判斷隊(duì)是否為空
{
if(qu.front==qu.rear)
return TRUE;
else
return ERROR;
}
int isQueueFull(SqQueue qu) //判斷隊(duì)是否已滿(mǎn)
{
if((qu.rear+1)%MAXSIZE==qu.front)
return TRUE;
else
return ERROR;
}
int inQueue(SqQueue &qu,int x) //入隊(duì)
{
if(isQueueFull(qu))
return ERROR;
qu.rear=(qu.rear+1)%MAXSIZE;
qu.data[qu.rear]=x;
return TRUE;
}
int outQueue(SqQueue &qu,int &x) //出隊(duì)
{
if(isQueueEmpty(qu))
return ERROR;
qu.front=(qu.front+1)%MAXSIZE;
x=qu.data[qu.front];
return TRUE;
}
int main()
{
return 0;
}