// File: heap_test.go // Created Time: 2023-01-12 // Author: Reanon (793584285@qq.com) package chapter_heap import ( "container/heap" "fmt" "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) }