c++自底向上算符优先分析_数据与算法总结——基本数据结构3(优先级队列)...

5d7d6984bfa420f0ab985fcebb9330af.png

2 基本数据结构

2.6 优先级队列

不同于普通队列的先进先出,而是按照优先权的高低取出。

很多实现方式:有序顺序表、无序顺序表、有序链表、无序链表、堆。当然我们重点说堆。

堆是满足堆性质的完全二叉树。

最大堆就是堆中任一结点的值都小于其父结点的值,堆顶值最大。最小堆反过来。

堆存储在一位数组中。有n个结点的堆的高度是

维护堆很重要。

对于最大堆,如果某个结点的关键字小于其某个子结点的关键值,可以采用自顶向下堆化算法。

就比如下面这个例子:

f060437b5918ee8f179aa235094761ae.png

7fa7d77b307f303f70cd29627f7ec6f5.png

1196565a5cb1277db4f62cee9dd1ee27.png

如果某个结点的关键值大于其父结点的关键值,可以采用自底向上堆化算法。

就比如下面这个例子:

e24ed9d57b5364597c22a36b219fb0f8.png

726d90ef283e88425add73320107c264.png

24dc31a1726ac0d7f053481a7aa1f36b.png

f665f65dd53b6c0be5bec0c865a82057.png

插入:将新结点加入堆尾,自底向上堆化

建立堆:向空堆中插入元素同时调整

这种叫自顶向下堆堆构造,时间复杂度小于

,。

另一种建立堆的方法是把数组A看作一棵尚未满足堆性质的完全二叉树,从

到0反向遍历数组采用自顶向下堆化操作,这种叫自底向上堆构造,线性时间复杂度。

堆的删除:将堆顶删除,将堆尾结点放到堆顶。

优先级队列(Priority Queue)。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值