1.空队列时,front等于rear,现在当队列满时,也是front等于rear,那么如何判断此时的队列究竟是空还是满呢?
答:方法一:设置一个标志变量flag,当front==rear,且flag== 0 时队列为空,当front==rear,且flag==1时队列为满
方法二:当队列空时,条件就是front==rear,当队列满时,我们修改其条件,保留一个元素空间。也就是说,队列满时,数组中还有一个空闲单元。例如图4-12-8所示,我们就认为此队列已经满了,也就是说,我们不允许图4-12-7的右图情况出现。
2.队列的特点是什么?
答:先进先出,插入的一端为队尾,删除的一端为队头。
3.队列顺序存储的不足是什么?
答:我们假设一个队列有n个元素,则顺序存储的队列需建立一个大于n的数组,并把队列的所有元素存储在数组的前n个单元,数组下标为0的一端为队头。所谓的入队列操作,其实就是在队尾追加一个元素,不需要移动任何元素,因此时间复杂度为O(1),如图4-12-1所示。
与栈不同的是,队列元素的出列是在队头,即下标为0的位置,那就意味着,队列中的所有元素都向前移动,以保证队列的队头,也就是下标为0的位置 不为空,此时时间复杂度为O(n), 如图4-12-2所示。
4.什么是队列的假溢出?
答:队列满了,出队前两个元素,继续入队,因数组末尾元素已经占用,再向后加,就会产生数组越界的错误,可实际上,队列在下标为0和1的地方还是空闲的,这种现象叫做“假溢出”。
5.什么是循环队列?
答:队列头尾相接的顺序存储结构被称为循环队列。
6.计算队列长度公式是什么?
答:(rear - front + QueueQize)% QueueSize rear是队尾指针,front是队头指针,QueueSize是队列的最大尺寸。