数据结构就是结构定义加上结构操作:定义一种性质,并维护这种性质。
完全二叉树内容回顾
- 父子节点的编号存在可计算的关系,因此不需要存储边的信息
- 可以使用连续空间存储
堆的概念
- 一种基于完全二叉树的结构
- 大顶堆和小顶堆
- 大顶堆:任意的三元组,父节点都大于两个子节点
- 小顶堆:任意的三元组,父节点都小于两个子节点
- 堆适合维护集合的最值
堆的基本操作(以大顶堆为例)
- 尾部插入
- 比父节点大的就和父节点交换 递归向上调整
- 这个过程称为SIFT-UP
- 头部弹出
- 用最后一个元素(叶子节点)补位 递归向下调整
- 这个过程称为SIFT-DOWN
堆,优先队列和普通队列
堆是优先队列的实现方式
普通队列 | 优先队列 |
---|---|
尾部入队 | 尾部可以插入 |
头部出队 | 头部可以弹出 |
先进先出 | 每次出队权值最大(最大/最小的元素) |
数组实现 | 数组实现,逻辑上看成一个堆 |
一句话理解堆
堆适合维护:集合之最