队列
2020-08-23 本文已影响0人
sakura579
![](https://img.haomeiwen.com/i7186975/66484a86951c1e19.png)
![](https://img.haomeiwen.com/i7186975/92181c31814161c6.png)
![](https://img.haomeiwen.com/i7186975/02a19b877bf980cf.png)
queue
n. 队列;长队;辫子
vi. 排队;排队等候
vt. 将…梳成辫子;使…排队
rear
n. 后面;后方部队;屁股
adj. 后方的,后面的;背面的
v. 抚养;培养;喂养,饲养;栽种,培植;(马等动物)用后腿直立;竖起
adv. 向后;在后面
front
n. 前面;正面;前线
vt. 面对;朝向;对付
vi. 朝向
adj. 前面的;正面的
adv. 在前面;向前
![](https://img.haomeiwen.com/i7186975/d96827d380a37c89.png)
![](https://img.haomeiwen.com/i7186975/2a3eddf77f027cc6.png)
![](https://img.haomeiwen.com/i7186975/c4a31086f54bf3bf.png)
![](https://img.haomeiwen.com/i7186975/99bb56265c110978.png)
![](https://img.haomeiwen.com/i7186975/180b509b48492b18.png)
![](https://img.haomeiwen.com/i7186975/1dac23a674b87ec2.png)
![](https://img.haomeiwen.com/i7186975/d930cb74b3aff582.png)
![](https://img.haomeiwen.com/i7186975/9abffa3425b5e4a0.png)
![](https://img.haomeiwen.com/i7186975/60dce19743b8e3ad.png)
![](https://img.haomeiwen.com/i7186975/4c20790d7b6d1f97.png)
![](https://img.haomeiwen.com/i7186975/391afaa0d15e1f1c.png)
![](https://img.haomeiwen.com/i7186975/41afa5ccd845f06c.png)
![](https://img.haomeiwen.com/i7186975/9aa7c57625ce3bff.png)
两个指针变量 严格来说 是两个整型变量 用来指示 队头 队尾的位置
有指示位置的作用 类似于指针型作用 因此称他们为 指针 知道就好
对于入队操作 规定: 先移动队尾指针 ,然后入队元素
对于出队操作 规定:先移动队头指针,然后出队元素
对于队空状态 规定:front = rear 时 代表队空
队空状态是一个规定 不是队列与生俱来的东西
可以根据题目要求 推导出不同的队空状态 要注意!
入队
![](https://img.haomeiwen.com/i7186975/a0d258f651bb59bc.png)
![](https://img.haomeiwen.com/i7186975/687e56427c547d62.png)
出队
![](https://img.haomeiwen.com/i7186975/f4000811278c873b.png)
队头指针 front 并不指向当前的队头元素 它的下一个位置才是当前的队头元素所在的位置
而 rear 始终指向队尾元素
![](https://img.haomeiwen.com/i7186975/31872cf9310be5ac.png)
继续入队 会发生数组越界 但 不是队满 还有很多空位置 没有存储元素
这种状态 叫 假溢出
![](https://img.haomeiwen.com/i7186975/06404c5933a30cb1.png)
用来 取余的操作 实现了两个指针 沿着环走的效果
![](https://img.haomeiwen.com/i7186975/7f280b2667d0b873.png)
(8+1)%9 = 0
实现了 从 8 -> 0 的过程 满足了要求 沿着环走
这就是 我们顺序队 正确的 入队 出队操作
上面那个是不对的 它会造成假溢出
因此我们顺序队 通常被称作 循环队列(因为它绕着环走)
两种状态
队空
![](https://img.haomeiwen.com/i7186975/4d914f83cb2fce9a.png)
队满
![](https://img.haomeiwen.com/i7186975/663b7d4f6bc9273a.png)
rear如果继续后移一个位置 就会和 front 重合
此时这个位置称作队满
就是我们空出一个位置来
(如果重合称为队满 看着很舒服 但是无法区别队空、队满)
![](https://img.haomeiwen.com/i7186975/2f1aee61aeddc3a9.png)
在内存足够的情况下 连队满都没有 更不会有假溢出
队头指针 和 队尾指针
![](https://img.haomeiwen.com/i7186975/e4d6838642f83aca.png)
队空 没有数据结点 (有头结点)
front ->next = NULL;
![](https://img.haomeiwen.com/i7186975/decd46ba3ae7c455.png)
队空 没有数据结点(没有头结点)
front = NULL;