算法与数据结构(八)--优先队列

普通的队列是一种先进先出的数据结构,元素在队列尾追加,而从队列头删除,在某些情况下,我们可能需要找出队列中的最大值或者最小值 。

例如使用一个队列保存计算机的任务,一般情况下计算机的任务都是有优先级的,我们需要在最小计算机的任务中找出优先级最高的任务先执行,执行完毕后就需要吧这个任务从队列中删除。

普通的队列要完成这样的姑娘,需要每次便利队列中的所有元素,比较并找出最大值,效率不是很高,这个时候,我们就需要用一种特殊的队列来完成这种需求:优先队列。

优先队列按照作用可分为两类:
最大优先队列:可以获取并删除队列中最大的值
最小优先队列:可以获取并删除队列中最小的值

优先队列是通常是靠堆实现的。

一.最大优先队列

我们之前学习过堆,而堆这种结构是可以方便的删除最大的值,所以我们可以基于堆区实现最大优先队列。

二.最小优先队列

最小优先队列实现起来也比较简单,我们同样也可以基于堆来完成最小优先队列。

我们前面学习堆的时候,堆中存放数据元素的数组要满足如下特性:
1.最大的元素放在数组的索引1处。
2.每个结点的数据总是大于等于它的两个子结点的数据。

其实我们之前实现的队可以把它叫做最大堆,我们可以用相反的思想实现最小堆 ,让对重存放数组元素的数组满足如下特性:
1.最小的元素放在数组的索引1处。
2.每个结点的数据总是小于等于它的两个子结点的数据。

这样我们就能很快的访问到堆中最小的数据。

相关推荐
lisw053 小时前
互联网上的数据结构可视化!
数据结构·信息可视化
老师我太想进步了20268 小时前
【数据结构-1】例解算法复杂度
数据结构·算法
YSL0701249 小时前
一文通关-----排序
数据结构·算法
夜不会漫长1 天前
C++:红黑树
数据结构·算法
冻柠檬飞冰走茶1 天前
PTA刷题集之Airline Routes(C语言实现)
c语言·开发语言·数据结构·算法
736c1 天前
固件开发岗算法
数据结构·算法
冻柠檬飞冰走茶1 天前
PTA刷题集之Battle Over Cities - Hard Version(C语言实现)
c语言·开发语言·数据结构·算法
PaperAccept1 天前
【研知有术论文发表】材料科学一区期刊,影响因子30+的纳米科技SCI,审稿严格但有效率
大数据·数据结构·科技·量子计算
Tairitsu_H1 天前
[C++高阶数据结构·图论下] 最短路径:为什么“挑最小的”一定正确?
数据结构·c++·图论
Tairitsu_H1 天前
[C++高阶数据结构·图论上] 最小生成树:为什么“选边”和“选点”是两条路?
数据结构·c++·图论·最小生成树