普通队列按进入顺序出队。优先队列则总是先取优先级最高的元素。二叉堆是实现优先队列的经典结构。
堆不是内存中的“堆区”
这里的 heap 是一种树形数据结构,与 malloc 使用的动态存储区域只是英文同名,概念完全不同。
完全二叉树可以放进数组
最大堆满足:
- 形状是完全二叉树;
- 每个父节点值都不小于孩子。
2026/7/12大约 3 分钟
普通队列按进入顺序出队。优先队列则总是先取优先级最高的元素。二叉堆是实现优先队列的经典结构。
这里的 heap 是一种树形数据结构,与 malloc 使用的动态存储区域只是英文同名,概念完全不同。
最大堆满足:
之前,我们把变量比作装数据的盒子。这一篇要把这个比喻补完整:盒子不是凭空出现的,它需要存储空间,也只能在一段有限的时间里被合法使用。
| 概念 | 回答的问题 |
|---|---|
| 作用域(scope) | 在源代码的哪些位置能写出这个名字? |
| 存储期(storage duration) | 保存这个对象的存储从何时存在到何时? |
| 生命周期(lifetime) | 这个对象从何时可以被当作该类型使用,到何时结束? |