Функция heap.Push
Функция heap.Push добавляет новый элемент в кучу,
сохраняя ее свойства. Она принимает два параметра:
первый — это интерфейс heap.Interface, который
представляет кучу, второй — элемент, который нужно добавить.
Функция автоматически корректирует структуру кучи,
чтобы она оставалась упорядоченной.
Синтаксис
heap.Push(h, x)
Пример
Давайте создадим кучу из целых чисел и добавим в нее новый элемент:
package main
import (
"container/heap"
"fmt"
)
type IntHeap []int
func (h IntHeap) Len() int { return len(h) }
func (h IntHeap) Less(i, j int) bool { return h[i] < h[j] }
func (h IntHeap) Swap(i, j int) { h[i], h[j] = h[j], h[i] }
func (h *IntHeap) Push(x any) {
*h = append(*h, x.(int))
}
func (h *IntHeap) Pop() any {
old := *h
n := len(old)
x := old[n-1]
*h = old[0 : n-1]
return x
}
func main() {
h := &IntHeap{1, 3, 5, 7, 9}
heap.Init(h)
heap.Push(h, 4)
fmt.Println(*h)
}
Результат выполнения кода:
[1 3 4 7 9 5]
Пример
Давайте создадим кучу из строк и добавим в нее новый элемент:
package main
import (
"container/heap"
"fmt"
)
type StringHeap []string
func (h StringHeap) Len() int { return len(h) }
func (h StringHeap) Less(i, j int) bool { return h[i] < h[j] }
func (h StringHeap) Swap(i, j int) { h[i], h[j] = h[j], h[i] }
func (h *StringHeap) Push(x any) {
*h = append(*h, x.(string))
}
func (h *StringHeap) Pop() any {
old := *h
n := len(old)
x := old[n-1]
*h = old[0 : n-1]
return x
}
func main() {
h := &StringHeap{"abcde", "bcd", "cdef"}
heap.Init(h)
heap.Push(h, "abc")
fmt.Println(*h)
}
Результат выполнения кода:
[abc abcde bcd cdef]
Смотрите также
-
функцию
heap.Init,
которая инициализирует кучу -
функцию
heap.Pop,
которая удаляет и возвращает минимальный элемент -
функцию
heap.Fix,
которая восстанавливает порядок после изменения элемента -
функцию
heap.Remove,
которая удаляет элемент по индексу