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

102 lines
3.1 KiB
Go

// File: heap_test.go
// Created Time: 2023-01-12
// Author: Reanon (793584285@qq.com)
package chapter_heap
import (
"container/heap"
"fmt"
"strconv"
"testing"
. "github.com/krahets/hello-algo/pkg"
)
func testPush(h *intHeap, val int) {
// Вызвать функции heap.Interface для добавления элемента
heap.Push(h, val)
fmt.Printf("\nПосле добавления элемента %d в кучу\n", val)
PrintHeap(*h)
}
func testPop(h *intHeap) {
// Вызвать функции heap.Interface для удаления элемента
val := heap.Pop(h)
fmt.Printf("\nПосле извлечения элемента вершины кучи %d\n", val)
PrintHeap(*h)
}
func TestHeap(t *testing.T) {
/* Инициализация кучи */
// Инициализация максимальной кучи
maxHeap := &intHeap{}
heap.Init(maxHeap)
/* Добавление элемента в кучу */
testPush(maxHeap, 1)
testPush(maxHeap, 3)
testPush(maxHeap, 2)
testPush(maxHeap, 5)
testPush(maxHeap, 4)
/* Получение элемента с вершины кучи */
top := maxHeap.Top()
fmt.Printf("Элемент на вершине кучи = %d\n", top)
/* Извлечение элемента с вершины кучи */
testPop(maxHeap)
testPop(maxHeap)
testPop(maxHeap)
testPop(maxHeap)
testPop(maxHeap)
/* Получение размера кучи */
size := len(*maxHeap)
fmt.Printf("Количество элементов в куче = %d\n", size)
/* Проверка, пуста ли куча */
isEmpty := len(*maxHeap) == 0
fmt.Printf("Пуста ли куча: %t\n", isEmpty)
}
func TestMyHeap(t *testing.T) {
/* Инициализация кучи */
// Инициализация максимальной кучи
maxHeap := newMaxHeap([]any{9, 8, 6, 6, 7, 5, 2, 1, 4, 3, 6, 2})
fmt.Printf("После построения кучи из входного массива\n")
maxHeap.print()
/* Получение элемента с вершины кучи */
peek := maxHeap.peek()
fmt.Printf("\nЭлемент на вершине кучи = %d\n", peek)
/* Добавление элемента в кучу */
val := 7
maxHeap.push(val)
fmt.Printf("\nПосле добавления элемента %d в кучу\n", val)
maxHeap.print()
/* Извлечение элемента с вершины кучи */
peek = maxHeap.pop()
fmt.Printf("\nПосле извлечения элемента вершины кучи %d\n", peek)
maxHeap.print()
/* Получение размера кучи */
size := maxHeap.size()
fmt.Printf("\nКоличество элементов в куче = %d\n", size)
/* Проверка, пуста ли куча */
isEmpty := maxHeap.isEmpty()
fmt.Printf("\nПуста ли куча: %t\n", isEmpty)
}
func TestTopKHeap(t *testing.T) {
/* Инициализация кучи */
// Инициализация максимальной кучи
nums := []int{1, 7, 6, 3, 2}
k := 3
res := topKHeap(nums, k)
fmt.Printf("Наибольшие " + strconv.Itoa(k) + " элементов")
PrintHeap(*res)
}