本文共 991 字,大约阅读时间需要 3 分钟。
循环队列的存储空间为 Q(1:40) ,初始状态为 front=rear=40 。经过一系列正常的入队与退队操作后, front=rear=15 ,此后又退出一个元素,则循环队列中的元素个数为(39或0,且产生下溢错误)。
【解析】循环队列是队列的一种顺序存储结构,用队尾指针 rear 指向队列中的队尾元素,用排头指针 front 指向排头元素的前一个位置。入队运算时,队尾指针进 1 (即 rear+1 ),然后在 rear 指针指向的位置插入新元素。退队运算时,排头指针进 1 (即 front+1 ),然后删除 front 指针指向的位置上的元素。当 front=rear=15 时可知队列空或者队列满,此后又退出一个元素,如果之前队列为空,退出操作会产生错误,队列里有 0 个元素;如果退出之前队列已满 (40 个元素 ) ,执行退出后,队列里还有 39 个元素。
注意:
为了区分队空还是队满的清空,有三种处理方式:
1)牺牲一个单元来区分队空和队满。这时队满条件为:(rear+1)%Maxsize == front;队空仍为:front==rear;队列中元素个数为:(rear-front+Maxsize)%Maxsize; 2)增设表示元素个数的数据成员,如:Q.size==0为空,Q.size==Maxsize为满; 3)增设tag数据成员,当tag=0 且front==rear时队空,当tag==1且front==rear时队满。 而此题并未说明是哪种情况,所以fron==rear队空队满都有可能。判定一个队列QU(最多元素为m0)为满队列的条件是()
判定队列空间是空还是满的方法:少用一个元素空间,判定队列呈“满”状态的标志是“队列头指针在队列尾指针的下一位置上(指环状的下一位置)” 意思就是说,循环队列留了一个元素空间,即当maxsize=100的时候,实际能存的数据只有99个,留一个不存的目的就是用来区分队列空还是满。因为空的时候q.rear=q.front,而满的时候就变成了(q.rear+1)%maxsize=q.front。 如果判定条件是q.rear%maxsize=q.front,就是判定头指针和尾指针是否在同一个位置上如果判定条件是(q.rear+1)%maxsize=q.front,就是判定头指针在尾指针的下一个位置上
转载地址:http://kqypi.baihongyu.com/