队列的具体应用:
所有和事件有关的操作都有队列的影子。
(例如操作系统认为先进来的先处理)
定义:
一种可是实现“先进先出”的存储结构
分类:
链式队列:用链表实现
静态队列:用数组实现
静态队列通常都必须是循环队列,为了减少
内存浪费。
循环队列 :
1、静态队列为什么必须是循环队列
如果用传统意义的数组实现队列,无论入队还是出队,rear和front指针只能+不能-;
比 F元素下标小的的数组元素下标就浪费了。
循环队列怎么用呢?
当出现这种情况时,如果仍然需要插入元素,那么f指向下一个位置,即5,r指向下一个位置即0.如图:
那么,我们在插入一个元素“国”,然后再删除中呢?
这就是所谓的循环队列。
2、 循环队列需要几个参数来确定 及其含义
需要2个参数来确定
front
rear
3、 循环队列各个参数的含义
2个参数不同场合不同的含义?
建议初学者先记住,然后慢慢体会
1)队列初始化
front和rear的值都是零,初始化时队列就是空的。
2)队列非空
front代表队列的第一个元素
rear代表了最后一个有效元素的下一个元素
3)队列空
front和rear的值相等,但是不一定是零
4、 循环队列入队伪算法讲解
需要判断r是否指向数组最后一个元素。
两步完成:
1)将值存入r所代表的位置
2)将r后移,正确写法是rear = (rear+1)%数组长度
错误写法:rear=rear+1;
5、 循环队列出队伪算法讲解
front = (front+1)% 数组长度
6、 如何判断循环队列是否为空
如果front与rear的值相等,
则队列一定为空
7、 如何判断循环队列是否已满
上图这种情况,如果再插入f,r指向同一个元素。如果这样的话就不能判断队列是空还是满。
所以为了判断循环队列是否已满,有一下两种方式:
1、多增加一个表标识的参数
2、少用一个队列中的元素(才一个,不影响的)
如果r和f紧挨着(r的下一个位置是f),则队列已满
用C语言描述:
If((r+1)%数组长度)==f
队列已满
Else
队列不满
时间: 2024-10-10 01:40:29