一、【问题描述】
若希望循环队列中的元素都能得到利用,则需设置一个标志域tag,并以tag的值为0
或1来区分队头指针front和队尾指针rear相同时的队列状态是“空”还是“满”。试
编写与此结构相应的入队和出队算法。
二、【问题解答】
(1)入队算法
//入队算法
int EnQ(SqQueue &Q,Elemtype x){
if(Q.front==Q.rear&&Q.tag==1)return 0;
Q.data[Q.rear]=x;
Q.rear=(Q.rear+1)%MaxSize;
Q.tag=1;
return 1;
}
(2)出队算法
//出队算法
int DeQ(SqQueue &Q,Elemtype &x){
if(Q.front==Q.rear&&Q.tag==0)return 0;
x=Q.data[Q.front];
Q.front=(Q.front+1)%MaxSize;
Q.tag=0;
return 1;
}