线性结构的应用------队列
定义:
一种可以实现“先进先出”的存储结构
分类:
链式队列: -----用链表实现(比较简单)
静态队列: -----用数组实现 静态队列通常都必须是循环队列
应用:
所有和时间有关的事件都有队列的影子
循环队列的讲解
(1)静态队列为什么必须是循环队列
现在如果一个数组里面存了四个元素,那么front就只想第一个有效元素,而real指向最后一个元素的下一个元素,当增加元素时,只能在rear一端增加,即rear向上移。删除元素时,只能在front一端删除元素,即front向上移。但是如果一直增增删删,那么就会造成rear端溢出,而front端浪费,所以对于这种情况,可以采用循环队列的形式,即当rear已经指向数组最后一个元素时,那么就可以转而将rear指向数组的第一个空出来的空间。
(2)循环队列需要几个参数来确定
需要2个参数来确定:front 和 rear
(3)循环队列各个参数的含义:
2个参数在不同场合有不同的含义
- 队列初始化
front和rear的值都为零
- 队列非空
front代表的是队列的第一个元素
rear代表的是队列的最后一个有效元素的下一个元素
- 队列为空
front和real的值相等,但不一定为零
(4)循环队列入队伪算法讲解:
两步完成:
- 将值存入rear所代表的位置
- 错误的写法 :rear = rear+1;
正确的写法是:rear = (rear+1)%数组的长度
(5)循环队列出队伪算法讲解
Front =(front +1)%数组的长度
(6) 如何判断循环队列是否为空
如果front与rear的值相等,则该队列就一定为空
(7)如何判断循环队列是否已满
因为front的值可能比rear大,也可能比他小,也可能相等
所以有两种方式:
- 多增加一个标识是否满的参数
- 少用一个元素【通常用此种方式】
如果front和rear的值相差1,且front>rear,则证明队列已满。
用C语言伪算法表示为:
if ((rear+1)%数组长度==front)
已满
else
未满