A-A+
如果希望循环队列中的元素都能得到利用 则需要设置一个标志域tag 并以tag的值为0或1来区
问题详情
如果希望循环队列中的元素都能得到利用,则需要设置一个标志域tag,并以tag的值为0或1来区分尾指针和头指针值相同时的队列状态是“空”还是“满”。试编写与此结构相应的入队列和出队列的算法。
请帮忙给出正确答案和分析,谢谢!
参考答案
正确答案:(1)入队列操作。void EnQueue(SqQueue&QElemType X){ /*若队列Q不满则将元素x插入队列并使其成为新的队尾元素*/if(Q.front==Q.rear&&tag) /*队满*/exit(0);Q.rear=(Q.rear+1)%MAXQSTZE;if(Q.rear==Q.front)tag=1;}(2)出队列操作。void DeQueue(SqQueue&QElemType&x){ /*队列不空则让队头元素出队列其值由X输出*/if(Q.front==Q.rear&&tag==0)/*空队列*/exit(0);X=Q.base[Q.front];Q.front=[Q.front+1]%MAXQSlZE;if(Q.front==Q.rearltag=0;}
在循环队列中,若用标志位tag来判断队满和队空,假设当tag=0,并且头指针和尾指针相等时表示队空;当tag=1,并且头指针和尾指针相等时表示队满。在这种情况下,实现入队和出队操作的函数如下。