题目
循环队列存储在数组A [0..m]中,则入队时的操作为( )。A. rear=rear+1B. rear=(rear+1)%(m一1)C. rear=(rear+1)%mD. rear=(rear+1)%(m+1)
循环队列存储在数组A [0..m]中,则入队时的操作为( )。
A. rear=rear+1
B. rear=(rear+1)%(m一1)
C. rear=(rear+1)%m
D. rear=(rear+1)%(m+1)
题目解答
答案
D. rear=(rear+1)%(m+1)
解析
循环队列通过数组实现时,为了避免“假溢出”现象,采用首尾相连的存储方式。数组大小为m+1(题目中数组为A[0..m]),但实际有效存储空间为m个元素,预留一个位置用于区分队列空和满的状态。
入队操作的核心是移动队尾指针rear,并确保其循环回到数组起始位置。此时需对rear+1进行取模运算,取模基数应为数组的总长度m+1,而非有效存储空间大小m。若未正确取模,可能导致指针越界或逻辑错误。
关键步骤分析
- 数组长度确定:题目中数组为
A[0..m],总长度为m+1。 - 预留一个位置:循环队列需预留一个位置判断队列是否满,因此实际有效存储空间为
m。 - 队尾指针移动:入队时,
rear需加1并取模m+1,即rear = (rear + 1) % (m + 1),确保指针在数组范围内循环。
选项辨析
- 选项A:
rear = rear + 1
未取模,可能导致rear超出数组范围。 - 选项B:
rear = (rear + 1) % (m - 1)
取模基数错误,m-1与数组长度m+1无关。 - 选项C:
rear = (rear + 1) % m
取模基数错误,应为m+1而非m。 - 选项D:
rear = (rear + 1) % (m + 1)
正确,符合数组长度m+1的取模逻辑。