queue
n. 队列;长队;辫子
vi. 排队;排队等候
vt. 将…梳成辫子;使…排队
rear
n. 后面;后方部队;屁股
adj. 后方的,后面的;背面的
v. 抚养;培养;喂养,饲养;栽种,培植;(马等动物)用后腿直立;竖起
adv. 向后;在后面
front
n. 前面;正面;前线
vt. 面对;朝向;对付
vi. 朝向
adj. 前面的;正面的
adv. 在前面;向前
两个指针变量 严格来说 是两个整型变量 用来指示 队头 队尾的位置
有指示位置的作用 类似于指针型作用 因此称他们为 指针 知道就好
对于入队操作 规定: 先移动队尾指针 ,然后入队元素
对于出队操作 规定:先移动队头指针,然后出队元素
对于队空状态 规定:front = rear 时 代表队空
队空状态是一个规定 不是队列与生俱来的东西
可以根据题目要求 推导出不同的队空状态 要注意!
入队
出队
队头指针 front 并不指向当前的队头元素 它的下一个位置才是当前的队头元素所在的位置
而 rear 始终指向队尾元素
继续入队 会发生数组越界 但 不是队满 还有很多空位置 没有存储元素
这种状态 叫 假溢出
用来 取余的操作 实现了两个指针 沿着环走的效果
(8+1)%9 = 0
实现了 从 8 -> 0 的过程 满足了要求 沿着环走
这就是 我们顺序队 正确的 入队 出队操作
上面那个是不对的 它会造成假溢出
因此我们顺序队 通常被称作 循环队列(因为它绕着环走)
两种状态
队空
队满
rear如果继续后移一个位置 就会和 front 重合
此时这个位置称作队满
就是我们空出一个位置来
(如果重合称为队满 看着很舒服 但是无法区别队空、队满)
在内存足够的情况下 连队满都没有 更不会有假溢出
队头指针 和 队尾指针
队空 没有数据结点 (有头结点)
front ->next = NULL;
队空 没有数据结点(没有头结点)
front = NULL;
网友评论