// stdlib/examples/heap_demo.aether
// Heap(堆)数据结构示例
PRINTLN("=== Aether Heap(堆)示例 ===")
PRINTLN("")
// 最小堆
PRINTLN("1. 最小堆操作")
Set MIN_HEAP MIN_HEAP_NEW()
PRINTLN("创建空的最小堆")
// 插入元素
Set MIN_HEAP MIN_HEAP_INSERT(MIN_HEAP, 5)
Set MIN_HEAP MIN_HEAP_INSERT(MIN_HEAP, 3)
Set MIN_HEAP MIN_HEAP_INSERT(MIN_HEAP, 7)
Set MIN_HEAP MIN_HEAP_INSERT(MIN_HEAP, 1)
Set MIN_HEAP MIN_HEAP_INSERT(MIN_HEAP, 9)
Set MIN_HEAP MIN_HEAP_INSERT(MIN_HEAP, 2)
PRINTLN("插入元素 [5, 3, 7, 1, 9, 2]")
PRINTLN("最小堆: " + MIN_HEAP_TO_STRING(MIN_HEAP))
PRINTLN("堆顶(最小值): " + TO_STRING(MIN_HEAP_PEEK(MIN_HEAP)))
PRINTLN("是否为有效最小堆: " + TO_STRING(MIN_HEAP_IS_VALID(MIN_HEAP)))
PRINTLN("")
// 提取最小值
PRINTLN("2. 提取最小值")
Set RESULT MIN_HEAP_EXTRACT(MIN_HEAP)
Set MIN_HEAP RESULT["heap"]
PRINTLN("提取最小值: " + TO_STRING(RESULT["value"]))
PRINTLN("提取后的堆: " + MIN_HEAP_TO_STRING(MIN_HEAP))
Set RESULT MIN_HEAP_EXTRACT(MIN_HEAP)
Set MIN_HEAP RESULT["heap"]
PRINTLN("再次提取: " + TO_STRING(RESULT["value"]))
PRINTLN("当前堆: " + MIN_HEAP_TO_STRING(MIN_HEAP))
PRINTLN("")
// 从数组创建最小堆
PRINTLN("3. 从数组创建最小堆")
Set ARR [15, 10, 20, 8, 12, 25, 6]
PRINTLN("原数组: " + TO_STRING(ARR))
Set MIN_HEAP2 MIN_HEAP_FROM_ARRAY(ARR)
PRINTLN("构建的最小堆: " + MIN_HEAP_TO_STRING(MIN_HEAP2))
PRINTLN("是否有效: " + TO_STRING(MIN_HEAP_IS_VALID(MIN_HEAP2)))
PRINTLN("")
// 最大堆
PRINTLN("4. 最大堆操作")
Set MAX_HEAP MAX_HEAP_NEW()
PRINTLN("创建空的最大堆")
// 插入元素
Set MAX_HEAP MAX_HEAP_INSERT(MAX_HEAP, 5)
Set MAX_HEAP MAX_HEAP_INSERT(MAX_HEAP, 3)
Set MAX_HEAP MAX_HEAP_INSERT(MAX_HEAP, 7)
Set MAX_HEAP MAX_HEAP_INSERT(MAX_HEAP, 1)
Set MAX_HEAP MAX_HEAP_INSERT(MAX_HEAP, 9)
Set MAX_HEAP MAX_HEAP_INSERT(MAX_HEAP, 2)
PRINTLN("插入元素 [5, 3, 7, 1, 9, 2]")
PRINTLN("最大堆: " + MAX_HEAP_TO_STRING(MAX_HEAP))
PRINTLN("堆顶(最大值): " + TO_STRING(MAX_HEAP_PEEK(MAX_HEAP)))
PRINTLN("是否为有效最大堆: " + TO_STRING(MAX_HEAP_IS_VALID(MAX_HEAP)))
PRINTLN("")
// 提取最大值
PRINTLN("5. 提取最大值")
Set RESULT MAX_HEAP_EXTRACT(MAX_HEAP)
Set MAX_HEAP RESULT["heap"]
PRINTLN("提取最大值: " + TO_STRING(RESULT["value"]))
PRINTLN("提取后的堆: " + MAX_HEAP_TO_STRING(MAX_HEAP))
PRINTLN("")
// 堆排序
PRINTLN("6. 使用堆进行排序")
Set UNSORTED [64, 34, 25, 12, 22, 11, 90]
PRINTLN("未排序数组: " + TO_STRING(UNSORTED))
Set SORTED_ASC HEAP_SORT_ASC(UNSORTED)
PRINTLN("升序排序: " + TO_STRING(SORTED_ASC))
Set SORTED_DESC HEAP_SORT_DESC(UNSORTED)
PRINTLN("降序排序: " + TO_STRING(SORTED_DESC))
PRINTLN("")
// 实际应用:Top K 问题
PRINTLN("7. 实际应用:找出最小的 K 个元素")
Set DATA [45, 23, 67, 12, 89, 34, 56, 78, 90, 3, 15]
PRINTLN("数据集: " + TO_STRING(DATA))
Set HEAP MIN_HEAP_FROM_ARRAY(DATA)
Set TOP_3_MIN MIN_HEAP_GET_K_MIN(HEAP, 3)
PRINTLN("最小的 3 个元素: " + TO_STRING(TOP_3_MIN))
Set HEAP2 MAX_HEAP_FROM_ARRAY(DATA)
Set TOP_3_MAX MAX_HEAP_GET_K_MAX(HEAP2, 3)
PRINTLN("最大的 3 个元素: " + TO_STRING(TOP_3_MAX))
PRINTLN("")
// 实际应用:优先级队列
PRINTLN("8. 实际应用:优先级队列(数值越小优先级越高)")
Set PRIORITY_QUEUE MIN_HEAP_NEW()
// 添加任务(优先级,任务ID)
PRINTLN("添加任务...")
Set PRIORITY_QUEUE MIN_HEAP_INSERT(PRIORITY_QUEUE, 3) // 低优先级
Set PRIORITY_QUEUE MIN_HEAP_INSERT(PRIORITY_QUEUE, 1) // 高优先级
Set PRIORITY_QUEUE MIN_HEAP_INSERT(PRIORITY_QUEUE, 5) // 很低优先级
Set PRIORITY_QUEUE MIN_HEAP_INSERT(PRIORITY_QUEUE, 2) // 中优先级
PRINTLN("优先级队列: " + MIN_HEAP_TO_STRING(PRIORITY_QUEUE))
PRINTLN("")
PRINTLN("按优先级处理任务:")
While (!HEAP_IS_EMPTY(PRIORITY_QUEUE)) {
Set RESULT MIN_HEAP_EXTRACT(PRIORITY_QUEUE)
Set PRIORITY_QUEUE RESULT["heap"]
PRINTLN("处理优先级为 " + TO_STRING(RESULT["value"]) + " 的任务")
}
PRINTLN("")
PRINTLN("=== 示例完成 ===")