PriorityQueue and Heap

前言:

以前学数据结构看堆,似懂非懂,没什么感觉
现在算法里的优先级队列的实现又用到了堆,这时突然感觉知其一了,
于是写了笔记,也许我有生之年能把所有的基本数据结构写一遍

首先我认为:
数据结构按抽象层次可以大体分为三类

1.低级数据结构:

1.数组
2.链表

2. 中级数据结构

1.树
2.堆
3 图
4.原始栈
5.原始队列

3.高级数据结构

1.高级语言中的对象型数据结构
2.其他

逻辑结构:

堆是一棵完全二叉树,不管是大顶堆还是小顶堆,实质上就是保证从根开始,每一棵子树的根都比它的孩子
的优先级大。具体来讲性质如下:
Maxk 表示优先级第k大的元素
1. Max1 根节点
2. Maxk 第二层到第k层中的某个节点

堆的插入(swim,上浮)

按照完全树节点的顺序插入新节点,然后只要优先级比根节点大,就不断与根节点交换

堆的删除(sink,下沉)

临时替代法
将root用最后一个节点覆盖,然后只要该节点比某一个直接孩子节点小,就与之交换

物理结构:

使用数组这样的顺序结构比较方便
按照完全树的编号,从1开始存储(为了计算直观,所以从1开始)
0号正好可以存储节点个数

已知一个节点编号i,则父节点i/2
左右孩子(2*i,2*i+1)(前提是节点存在)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值