如果希望循环队列中的元素都能得到利用,则需要设置一个标志域tag,并以tag的值为0或1来区分尾指针和头指针值相同时的队列状态是“空”还是“满”。试编写与此结构相应的入队列和出队列的算法。

admin2014-12-25  35

问题 如果希望循环队列中的元素都能得到利用,则需要设置一个标志域tag,并以tag的值为0或1来区分尾指针和头指针值相同时的队列状态是“空”还是“满”。试编写与此结构相应的入队列和出队列的算法。

选项

答案(1)入队列操作。 void EnQueue(SqQueue&Q,ElemType 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&Q,ElemType&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.rearl tag=0; }

解析 在循环队列中,若用标志位tag来判断队满和队空,假设当tag=0,并且头指针和尾指针相等时表示队空;当tag=1,并且头指针和尾指针相等时表示队满。在这种情况下,实现入队和出队操作的函数如下。
转载请注明原文地址:https://jikaoti.com/ti/fpLaFFFM
0

最新回复(0)