设循环队列的存储空间为Q(1:35),初始状态为front=rear=35.现经过一系列入队与退队运算后,

front=15,rear=15,则循环队列中元素个数为多少?
2025-01-28 06:31:01
推荐回答(5个)
回答1:

答案是0或35。前提条件是:此循环队列的存储空间全部用于存储数据,而没有留出一个存储空间用于判别队满与队空。

在上述循环队列中,当front = rear时,

(1)有可能是队空:先入队15个元素,rear = 15;再出队15个元素,front = 15。

(2)有可能是队满:先入队15个元素,rear = 15;再出队15个元素,front =
 15;最后再入队35个元素,rear指针循环一圈后再次等于15。

综上,队列中元素个数为0或35。

但应注意,上述的循环队列由于无法判别队满与队空,导致其产生二义性(即有歧义),可用性降低。因此,改进的方法是少用一个存储空间,即队列最大只存储34个元素,此时可用下列方法区分队满与队空:

(1)队满:(rear + 1)% MaxSize == front

(2)队空:rear == front

计算队列的元素个数:(尾-头+表长)%表长

队列头指针为front,队列尾指针为rear,队列容量为M,则元素个数为|rear-front+M|%M,注意,这个%是求余运算。

为充分利用向量空间,克服"假溢出"现象的方法是:将向量空间想象为一个首尾相接的圆环,并称这种向量为循环向量。存储在其中的队列称为循环队列(Circular Queue)。这种循环队列可以以单链表的方式来在实际编程应用中来实现。

条件处理:

循环队列中,由于入队时尾指针向前追赶头指针;出队时头指针向前追赶尾指针,造成队空和队满时头尾指针均相等。因此,无法通过条件front==rear来判别队列是"空"还是"满"。

解决这个问题的方法至少有两种:

① 另设一布尔变量以区别队列的空和满;

②另一种方式就是数据结构常用的: 队满时:(rear+1)%n==front,n为队列长度(所用数组大小),由于rear,front均为所用空间的指针,循环只是逻辑上的循环,所以需要求余运算。如图情况,队已满,但是rear(5)+1=6!=front(0),对空间长度求余,作用就在此6%6=0=front(0)。

回答2:

当front当front>rear时,循环队列中的元素个数为N-front+rear(N为循环队列容量)。
当front=rear时,循环队列中的元素个数可能为空,也可能为满。

此题答案应为0或者35。

回答3:

楼上都在那里放屁,答案是0或34。存储空间为(0:35)的时候才是0或35!

回答4:

front==rear, 这个是空队列的状态啊

回答5:

这个应该默认牺牲一个存储空间,既然牺牲一个存储空间,队满的时候不会出现两者相等,只有队空时,才会出现两者相等,个人理解应该答案只有一种为0。