题目
现有一个循环队列,其队头指针为 front,队尾指针为 rear,循环队列的总长度为 N,问怎么判断循环队列满了
A.front==rear
B.front==rear+1
C.front==rear%n
D.front==(rear+1)%n
现有一个循环队列,其队头指针为 front,队尾指针为 rear,循环队列的总长度为 N,问怎么判断循环队列满了
A.front==rear
B.front==rear+1
C.front==rear%n
D.front==(rear+1)%n
这么久了终于弄明白这个问题
队满的意思就是rear往前挪一位,就和front重合,就很容易得出答案了
为什么不是B,指针为什么可以对一个常数求余,Thomas的算法导论写的清清楚楚就是B啊...
为了强制自己复习,每次碰到这种题都亲自写一遍:
正确答案
D
答案解析
循环队列另设一个标志位以区别队列是空还是满,少用一个元素空间,约定以“队列头指针front在队尾指针rear的下一个位置上”作为队列“满”状态的标志。即:
队空时: front=rear
队满时: (rear+1)%maxsize=front
这样就区别了当队空和队满时,front和rear都相等的情况
D 循环队列总有一位不存储数据用来标示队列满,如果rear指向这个位,则说明其队列已满,那么循环的来想这个位的下一位就是front,即front= rear+1,由于是循环队列所以再得Mod n