队空时: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;
}