Q:数据结构的“堆”与内存管理的“堆”是同一个概念吗?
A:两者不是同一个概念,只是碰巧都叫“堆”。计算机系统内存中的堆是动态内存分配的一 部分,程序在运行时可以使用它来存储数据。程序可以请求一定量的堆内存,用于存储如对 象和数组等复杂结构。当这些数据不再需要时,程序需要释放这些内存,以防止内存泄漏。 相较于栈内存,堆内存的管理和使用需要更谨慎,使用不当可能会导致内存泄漏和野指针等 问题。
堆(heap)是一种满足特定条件的完全二叉树,主要可分为两种类型:
- 小顶堆(min heap):任意节点的值
<=
其子节点的值。 - 大顶堆(max heap):任意节点的值
>=
其子节点的值。
由于堆是一种完全二叉树,因此我们将采用数组来存储堆。当使用数组表示二叉树时,元素 代表节点值,索引代表节点在二叉树中的位置,节点指针通过索引映射公式来实现。