aether-azathoth 0.5.3

A lightweight, embeddable domain-specific language (DSL) interpreter with rich standard library
Documentation
// 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("=== 示例完成 ===")