前景参照:队列的基本说明以及代码实现
一、循环队列的队满队空
在常用的循环队列的使用中,我们使用队空判断(rear==front)以及队满判断(rear == (front + 1)% MAX)会发现循环队列的最后一个空间是没有办法被使用的,原因如下图所示:
如上图所见,当去判断队满时候,最后一个空间是没有办法被判断到的,故我们得新增一个flag标志位去判断!!!
二、 flag标志位法
在队列初始化的时候我们同时初始化一个flag标志位为false。在每次入队的时候我们将标志位置为true,每次出队的时候我们将标志位置为false。
- 队空判断修改为:(rear == front) && (true == flag)
- 队空判断修改为:(rear == front) && (false == flag)
原因:实际真正的队空队满的动作都是rear == front
- 当上一次我们是出队动作导致前后相等的,既该队列里所有数据都被我们所删除(读取)
- 当上一次我们是入队动作导致前后相等的,既该队列以及写满了