
队列是一种操作受限的顺序表(只能在队头删除,在队尾插入)。
所以依旧使用静态数组的形式去存储队列。
(1)创建(初始化)
现定于(顺序队列)的结构体



初始化队列时:

主函数中声明一个队列:

那么判断队列是否为空:

(2)入队操作(增):

把要插入的元素插入到队尾指针指向的位置
然后将队尾指针往后移动一格。

这就完成了一次入队操作。
那么这里的队列已满的条件是什么呢?
当整个静态数组都被存满之后:


其实是不可以的。
当我们让队头元素依次出列的时候。

rear依旧等于Maxsize
静态数组的前面的位置
是不是空余了

所以我们对原有的入队操作进行修改。
使rear指针重新指向前面空闲的位置

模运算这就实现了将存储空间在逻辑上变成了“环状”

我们将这样实现的队列称为循环队列
此时我们看到rear上面还有存储空间;
我们就可以进行后移。
此时队列已满的条件:队尾指针的在下一个位置是队头即:(Q.rear+1)%MaxSize==Q.front

也许有人会问,不是还有一个空位置吗。为什么不让front=rear呢?
我们记得判断队空的条件是:front=rear(会混淆)
所以代价就是牺牲一个存储单元。
循环队列的出队操作:(从front出来)




rear=front的时候,就是队列已经为空了(return false)
(4)查找

方案一:判断队列已满/已空

那么如何对队列元素的个数:
方案二:
我们在结构体中再定义一个size

方案三(同时满足两个条件)

一定要注意审题:(队尾指针是指向什么位置)





![[牛客101] 二叉树的层序遍历](https://img-blog.csdnimg.cn/4f0d827a9c9548f0a9258e2e17487842.png)














