Allen Joe (@zrcc)Go语言简单实现一个堆 中发帖

堆是一种特殊的 ** 完全二叉树 **,如果是小根堆,父节点小于任一子节点,大根堆则反之,因此,堆顶元素就是最小值 / 最大值。 

注意,这里的所说的堆和操作系统中的堆不同,只是使用了相同的英文单词 Heap。

由于堆的 ** 完全二叉树 ** 的特性,因此在实际数据结构的实现中,我们往往采用 ** 数组 ** 来作为堆的底层表示,完全二叉树的各个节点在数组中的索引见下表:
[image]
使用数组可以直接计算得到对应元素在数据中索引,而不需要通过指针跳转的形式,在内存中更加连续,更加高效。
接下来我们开始实现一个简单的堆,只有数值大小
type minHeap struct {
heap [] int
}

func (h *minHeap) Val (index int) int {
return h.heap [index]
}

func (h *minHeap...