一个由数组列表支持的二进制堆
type Iterator
func (iterator *Iterator) Begin() // 将迭代器重置为初始状态,然后调用Next获取第一个元素func (iterator *Iterator) End() // 将迭代器移过最后一个元素,然后调用Prev获取最后一个元素// 将迭代器移动到第一个元素,如果容器中有第一个元素则返回true。// 如果First()返回true,则可以通过index()和value()检索第一个元素的索引和值。修改迭代器的状态func (iterator *Iterator) First() bool// 将迭代器移动到最后元素,如果容器中有第一个元素则返回true。// 如果Last()返回true,则可以通过index()和value()检索第一个元素的索引和值。修改迭代器的状态func (iterator *Iterator) Last() boolfunc (iterator *Iterator) Next() boolfunc (iterator *Iterator) Prev() boolfunc (iterator *Iterator) Index() intfunc (iterator *Iterator) Value() interface{}
type Iterator
func NewWith(comparator utils.Comparator) *Heap// 用IntComparator实例化一个新的空堆,即元素的类型是intfunc NewWithIntComparator() *Heap// 用StringComparator实例化一个新的空堆,即元素的类型是Stringfunc NewWithStringComparator() *Heapfunc (heap *Heap) Clear()func (heap *Heap) Empty() boolfunc (heap *Heap) FromJSON(data []byte) errorfunc (heap *Heap) Iterator() Iteratorfunc (heap *Heap) Peek() (value interface{}, ok bool)func (heap *Heap) Pop() (value interface{}, ok bool)func (heap *Heap) Push(values ...interface{})func (heap *Heap) Size() intfunc (heap *Heap) String() stringfunc (heap *Heap) ToJSON() ([]byte, error)func (heap *Heap) Values() []interface{}
例子:
package mainimport ("github.com/emirpasic/gods/trees/binaryheap""github.com/emirpasic/gods/utils")// BinaryHeapExample to demonstrate basic usage of BinaryHeapfunc main() {// Min-heapheap := binaryheap.NewWithIntComparator() // empty (min-heap)heap.Push(2) // 2heap.Push(3) // 2, 3heap.Push(1) // 1, 3, 2heap.Values() // 1, 3, 2_, _ = heap.Peek() // 1,true_, _ = heap.Pop() // 1, true_, _ = heap.Pop() // 2, true_, _ = heap.Pop() // 3, true_, _ = heap.Pop() // nil, false (nothing to pop)heap.Push(1) // 1heap.Clear() // emptyheap.Empty() // trueheap.Size() // 0// Max-heapinverseIntComparator := func(a, b interface{}) int {return -utils.IntComparator(a, b)}heap = binaryheap.NewWith(inverseIntComparator) // empty (min-heap)heap.Push(2) // 2heap.Push(3) // 3, 2heap.Push(1) // 3, 2, 1heap.Values() // 3, 2, 1}
