container包中有三个数据结构:heap(堆)、list(链表)、ring(环)
Package heap
import "container/heap"
heap包提供了对任意实现了heap.Interface接口的类型的堆操作。最小堆是具有“每个节点都是以其为根的子树中最小值”属性的树。最大堆相反。
树的最小元素为其根元素,索引0的位置。最大堆相反。
heap是常用的实现优先队列的方法。要创建一个优先队列,实现一个具有使用(负的)优先级作为比较的依据的Less方法的Heap接口,如此一来可用Push添加项目而用Pop取出队列最高优先级的项目。
type Interface
这里不像list声明类型,而是直接作为接口令外部使用
type Interface interface { sort.Interface Push(x interface{}) // add x as element Len() Pop() interface{} // remove and return element Len() - 1. }
任何实现了本接口的类型都可以用于构建最小堆。最小堆可以通过heap.Init建立,数据是递增顺序或者空的话也是最小堆。
其中,这个堆结构组合了sort.Interface,所以需要实现Len(), Less(), Swap()三个方法。
注意接口的Push和Pop方法是供heap包调用的,使用heap.Push和heap.Pop来向一个堆添加或者删除元素。