
1. 堆的概念
2. 简单实现
package heap/**使用数组来存储数据从下标为 1 的位置开始存数据节点:i 左节点:2 * i 右节点:2 * i + 1 父节点:i / 2*/type Heap struct { value []int len int caps int}/**放入最后一个可插入的位置然后从下往上调整*/func (h *Heap) Push(v int) { if h.len == h.caps { panic("存不下了") } h.len++ h.value[h.len] = v h.up()}func (h *Heap) Pop() int { v := h.value[1] h.value[1] = h.value[h.len] // 最后一位放到第一 h.len-- h.down() return v}func (h *Heap) up() { n, i := h.value[h.len], h.len for n < h.value[i/2] && i > 0 { h.value[i] = h.value[i/2] h.value[i/2] = n i = i / 2 }}func (h *Heap) down() { n, i := h.value[1], 1 for { i = i * 2 l, r := h.value[i], h.value[i+1] if l < r { i++ } if i > h.len { break } if h.value[i] > n { h.value[i/2] = h.value[i] h.value[i] = n } }}