线性结构的两种常见应用之一 队列
两端操作, 一端只能入, 另一端只能出
补充:
front : 队首
rear : 队尾
入队 : 队尾操作
出队 : 队首操作
2) 循环队列需要几个参数来确定
3) 循环队列各个参数的含义
4) 循环队列入队伪算法
5) 循环队列出队伪算法
6) 如何判断循环队列是否为空
7) 如何判断循环队列是否已满
1) 队列初始化
front 和 rear 的值都是 零
2) 队列非空
front : 队列的第一个元素
rear : 队列的最后一个有效元素的下一个元素
3) 队列空
front 和 rear 相等, 但不一定是零
2) rear移向下一个元素, rear = (rear + 1) % arrLen
1) 多增加一个标志位参数, 1-满, 0-未满
2) 少使用一个元素,
则, 满: (rear + 1) % arrLen == front
说明:
如果全部元素都使用, 则满和空时, front和rear都相等
少使用一个元素, 当队列很大时, 可以忽略不计
如
操作系统中 阻塞队列, 执行队列, ...
一, 定义
一种可以实现"先进先出"的存储结构.两端操作, 一端只能入, 另一端只能出
补充:
front : 队首
rear : 队尾
入队 : 队尾操作
出队 : 队首操作
二, 分类
1, 链式队列[链表]
如图
2, 静态队列[数组]
静态队列通常都必须是循环队列
三, 循环队列
1, 问题
1) 静态队列为什么必须是循环队列2) 循环队列需要几个参数来确定
3) 循环队列各个参数的含义
4) 循环队列入队伪算法
5) 循环队列出队伪算法
6) 如何判断循环队列是否为空
7) 如何判断循环队列是否已满
2, 解
(1) 静态队列为什么必须是循环队列
如图, 出队/入队如果不是循环队列, 出队/入队都上移, 则下面的空间浪费了.
(2) 循环队列需要几个参数来确定
两个: front, rear(3) 循环队列各个参数的含义
这两个参数不同场合有不同的含义1) 队列初始化
front 和 rear 的值都是 零
2) 队列非空
front : 队列的第一个元素
rear : 队列的最后一个有效元素的下一个元素
3) 队列空
front 和 rear 相等, 但不一定是零
(4) 循环队列入队伪算法
1) 将值存入rear指向的元素2) rear移向下一个元素, rear = (rear + 1) % arrLen
(5) 循环队列出队伪算法
front = (front + 1) % arrLen(6) 如何判断循环队列是否为空
空: front == rear
(7) 如何判断循环队列是否已满
两种方式:1) 多增加一个标志位参数, 1-满, 0-未满
2) 少使用一个元素,
则, 满: (rear + 1) % arrLen == front
说明:
如果全部元素都使用, 则满和空时, front和rear都相等
少使用一个元素, 当队列很大时, 可以忽略不计
四, 算法
1, 入队2, 出队
五, 应用
所有与时间有关操作 都有 队列的影子如
操作系统中 阻塞队列, 执行队列, ...