在一个采用循环队列的系统中,队列的最大容量为M,当前队列头指针front指向数组下标为F的位置,队列尾指针rear指向数组下标为R的位置,且队列中元素个数大于0,则队列中元素的个数为?
答案解析
核心考点说明:循环队列的元素计数,涉及模运算的处理。
解题思路分析:循环队列中,rear指针可能在front指针之前或之后,直接相减可能得到负数或不正确的元素个数,需要通过模运算来处理指针循环的情况。
每个选项的详细分析:
A. R - F: 仅适用于rear大于等于front的简单情况,当rear小于front时结果错误,不能处理循环。
B. (R - F + M) % M: 当R >= F时,(R - F + M) % M 等价于 (R - F) % M ,即为正确的元素个数。当 R < F 时, R-F 是负数,加上M再取模,相当于把R-F值转正,并计算正确的值。所以该项可以正确计算。
C. (F - R + M) % M: 此公式计算的是队列空闲位置的个数,不是队列元素个数。当F >= R时,结果为剩余位置数量。当 F < R时,结果是负数,加上M转正得到剩余位置的数量。此项错误。
D. M - (R - F) % M:此项表示总容量减去(尾指针-头指针)取模,明显是不正确的计算方式。此项错误。
易错点提醒:循环队列的元素个数计算需要考虑front和rear指针的相对位置,避免直接相减。
正确答案:B