一个由数组列表支持的二进制堆

type Iterator

  1. func (iterator *Iterator) Begin() // 将迭代器重置为初始状态,然后调用Next获取第一个元素
  2. func (iterator *Iterator) End() // 将迭代器移过最后一个元素,然后调用Prev获取最后一个元素
  3. // 将迭代器移动到第一个元素,如果容器中有第一个元素则返回true。
  4. // 如果First()返回true,则可以通过index()和value()检索第一个元素的索引和值。修改迭代器的状态
  5. func (iterator *Iterator) First() bool
  6. // 将迭代器移动到最后元素,如果容器中有第一个元素则返回true。
  7. // 如果Last()返回true,则可以通过index()和value()检索第一个元素的索引和值。修改迭代器的状态
  8. func (iterator *Iterator) Last() bool
  9. func (iterator *Iterator) Next() bool
  10. func (iterator *Iterator) Prev() bool
  11. func (iterator *Iterator) Index() int
  12. func (iterator *Iterator) Value() interface{}

type Iterator

  1. func NewWith(comparator utils.Comparator) *Heap
  2. // 用IntComparator实例化一个新的空堆,即元素的类型是int
  3. func NewWithIntComparator() *Heap
  4. // 用StringComparator实例化一个新的空堆,即元素的类型是String
  5. func NewWithStringComparator() *Heap
  6. func (heap *Heap) Clear()
  7. func (heap *Heap) Empty() bool
  8. func (heap *Heap) FromJSON(data []byte) error
  9. func (heap *Heap) Iterator() Iterator
  10. func (heap *Heap) Peek() (value interface{}, ok bool)
  11. func (heap *Heap) Pop() (value interface{}, ok bool)
  12. func (heap *Heap) Push(values ...interface{})
  13. func (heap *Heap) Size() int
  14. func (heap *Heap) String() string
  15. func (heap *Heap) ToJSON() ([]byte, error)
  16. func (heap *Heap) Values() []interface{}

例子:

  1. package main
  2. import (
  3. "github.com/emirpasic/gods/trees/binaryheap"
  4. "github.com/emirpasic/gods/utils"
  5. )
  6. // BinaryHeapExample to demonstrate basic usage of BinaryHeap
  7. func main() {
  8. // Min-heap
  9. heap := binaryheap.NewWithIntComparator() // empty (min-heap)
  10. heap.Push(2) // 2
  11. heap.Push(3) // 2, 3
  12. heap.Push(1) // 1, 3, 2
  13. heap.Values() // 1, 3, 2
  14. _, _ = heap.Peek() // 1,true
  15. _, _ = heap.Pop() // 1, true
  16. _, _ = heap.Pop() // 2, true
  17. _, _ = heap.Pop() // 3, true
  18. _, _ = heap.Pop() // nil, false (nothing to pop)
  19. heap.Push(1) // 1
  20. heap.Clear() // empty
  21. heap.Empty() // true
  22. heap.Size() // 0
  23. // Max-heap
  24. inverseIntComparator := func(a, b interface{}) int {
  25. return -utils.IntComparator(a, b)
  26. }
  27. heap = binaryheap.NewWith(inverseIntComparator) // empty (min-heap)
  28. heap.Push(2) // 2
  29. heap.Push(3) // 3, 2
  30. heap.Push(1) // 3, 2, 1
  31. heap.Values() // 3, 2, 1
  32. }