若循环队列以数组Q[0..m~1]作为其存储结构,变量rear表示循环队列中的队尾元素的实际位置,其移动按rear=(rear+1)MOD m进行,变量length表示当前循环队列中的元素个数,则循环队列的队首元素的实际位置是( )。

admin2021-08-17  25

问题 若循环队列以数组Q[0..m~1]作为其存储结构,变量rear表示循环队列中的队尾元素的实际位置,其移动按rear=(rear+1)MOD m进行,变量length表示当前循环队列中的元素个数,则循环队列的队首元素的实际位置是(    )。

选项 A、rear—length
B、(rear—length+m)MOD m
C、(1+rear+m—length)MOD m
D、(rear+length—1)MOD m

答案C

解析 考查循环队列的性质。区分循环队列队空还是队满有3种方法:①牺牲一个存储单元;②增设表示元素个数的变量;③设标记法。这里用的是第二种方法。因为元素移动按rear=(rear+1)MOD m进行,即若队列没有循环时(即队列没有越过数组的头尾),队头应该在队尾的左侧,即数组下标小的位置,详细来算应当是数组下标为rear—(length—1)的位置(因为Q[rear]本身占用一个位置,所以减去的长度不是length,而是length—1),然而光是这样若队列越过了数组头尾,那么会导致算出来的队头为负数,所以这里可以给这个式子加上一个数组长度再取模,即(rear—length.1+m)MOD m,这样当队列没有越过数组边界时,由于取模的存在,能保证结果的正确,而当队列越过了数组边界时,由于加了m所以结果正确。
转载请注明原文地址:https://kaotiyun.com/show/cW3i777K
0

相关试题推荐
最新回复(0)