队列的基本操作有二:Enqueue(入队)、Dequeue(出队)。
链表的实现(未实现),下面讨论数组实现。
一、队列的数组实现
我们需要一个数组queue、位置front和rear(后方的)用于记录哪里是队列的头和尾部,size用于记录元素的个数。
入队和出队,需要上述相应参数的相应变化。
这种操作会导致一个问题,就是说rear在到达尾部时,就无法入队,但是前端可能有出队,进而导致有部分数组空间未能用到。所以我们需要循环数组(circular array)。
1. 循环数组
运行时间分析
示例
边界条件分析
dequeue 需要检测队列是否为空,因为为空时使用dequeue会导致返回一个不确定值。
- 当不适用size显示的记录队列大小时
可以依赖基准情况 rear=front-1来推出队列大小(也就是rear和front的差值绝对值),但是会有许多特殊的情况需要考虑,此时需要注意。
此时,若数组的大小为 ASize,则当有ASize-1个元素存在时队列就满了,因为rear和front的差值绝对值只有ASize-1种情况。【这个地方的思考方式值得学习】