数组模拟环形队列
对前面的数组模拟队列的优化,充分利用数组. 因此将数组看做是一个环形的。(通过取模的方式来实现即可)
分析说明:
尾索引的下一个为头索引时表示队列满,即将队列容量空出一个作为约定,这个在做判断队列满的时候需要注意 (rear + 1) % maxSize == front 满]
rear == front [空]
测试示意图:
课堂练习:
同学们完成环形数组模拟的队列的输出
(cq.rear + cq.maxSize – cq.front) % cq.maxSize
思路如下:
front
变量的含义做一个调整: front 就指向队列的第一个元素, 也就是说arr[front]
就是队列的第一个元素front
的初始值 = 0rear
变量的含义做一个调整:rear
指向队列的最后一个元素的后一个位置. 因为希望空出一个空间做为约定.rear
的初始值 = 0- 当队列满时,条件是
(rear + 1) % maxSize == front 【满】
- 对队列为空的条件,
rear == front 空
- 当我们这样分析, 队列中有效的数据的个数
(rear + maxSize - front) % maxSize // rear = 1 front = 0
- 我们就可以在原来的队列上修改得到,一个环形队列