C语言中循环队列的队满和队空的判断条件各是什么?有什么不同?

2022-03-25 社会 119阅读

队空时:Q.front==Q.rear;

队满时:Q.front==(Q.rear+1)%MAXSIZE;

front指向队首元素,rear指向队尾元素的下一个元素。

maxsize是队列长度。

扩展资料:

实现的代码:

#include

#include

#defineMAXSIZE100 //最大队列长度

#defineOK1

#defineERROR0

typedefintElemType;

typedefintStatus;

typedefstruct{

ElemType*base; //队列空间

intfront;  //队头指针

intrear;    //队尾指针,若队尾不为空,则指向队尾元素的下一个位置

}SqQueue;

//初始化循环队列

StatusinitQueue(SqQueue&Q){

Q.base=(ElemType*)malloc(MAXSIZE*sizeof(ElemType)); //申请空间

Q.front=Q.rear=0;    //队空

returnOK;

}

//入队

StatusenQueue(SqQueue&Q,ElemTypee){

if((Q.rear+1)%MAXSIZE==Q.front)returnERROR;//队满,无法添加

Q.base[Q.rear]=e; //插入元素

Q.rear= (Q.rear+1)%MAXSIZE;//队尾指针+1

returnOK;

}

//出队

StatusdeQueue(SqQueue&Q,ElemType&e){

if(Q.front==Q.rear)returnERROR;//队空,无法删除

e=Q.base[Q.front]

Q.front=(Q.front+1)%MAXSIZE; //队头指针+1

returnOK;

}

//返回队列长度

Statuslength(SqQueue&Q){

return(Q.rear-Q.front+MAXSIZE)%MAXSIZE; 

}

声明:你问我答网所有作品(图文、音视频)均由用户自行上传分享,仅供网友学习交流。若您的权利被侵害,请联系fangmu6661024@163.com