Files
Yudong Jin 772183705e Add ru version (#1865)
* Add Russian docs site baseline

* Add Russian localized codebase

* Polish Russian code wording

* Update ru code translation.

* Update code translation and chapter covers.

* Fix pythontutor extraction.

* Add README and landing page.

* placeholder of profiles

* Use figures of English version

* Remove chapter paperbook
2026-03-28 04:24:07 +08:00

46 lines
1.8 KiB
Go

// File: heap.go
// Created Time: 2023-01-12
// Author: Reanon (793584285@qq.com)
package chapter_heap
// В Go можно построить максимальную кучу для целых чисел, реализовав heap.Interface
// Для реализации heap.Interface одновременно требуется реализовать sort.Interface
type intHeap []any
// Функция Push интерфейса heap.Interface, реализующая добавление элемента в кучу
func (h *intHeap) Push(x any) {
// Push и Pop используют pointer receiver в качестве параметра
// Потому что они не только изменяют содержимое среза, но и меняют его длину.
*h = append(*h, x.(int))
}
// Функция Pop интерфейса heap.Interface, реализующая извлечение элемента с вершины кучи
func (h *intHeap) Pop() any {
// Элемент, который нужно удалить из кучи, хранится в конце
last := (*h)[len(*h)-1]
*h = (*h)[:len(*h)-1]
return last
}
// Функция Len интерфейса sort.Interface
func (h *intHeap) Len() int {
return len(*h)
}
// Функция Less интерфейса sort.Interface
func (h *intHeap) Less(i, j int) bool {
// При реализации минимальной кучи нужно изменить знак сравнения на «меньше»
return (*h)[i].(int) > (*h)[j].(int)
}
// Функция Swap интерфейса sort.Interface
func (h *intHeap) Swap(i, j int) {
(*h)[i], (*h)[j] = (*h)[j], (*h)[i]
}
// Top: получить элемент на вершине кучи
func (h *intHeap) Top() any {
return (*h)[0]
}