/* binary_heap.h -- 二叉堆头文件 */ #define MINDATA -32768 /* 数据类型定义 */ typedef int Item ; typedef struct heap { Item * array ; int capacity ; /* 容量 */ int size ; /* 当前数据数量 */ } * Heap ; /* 接口函数声明 */ /* 操作: 创建并初始化一个二叉堆 */ /* 操作前: pheap 指向一个二叉堆, capacity 是用来指定堆容量的变量 */ /* 操作后: 如果内存分配成功, 创建并将该堆初始化为空, capacity 容量, 返回1; 否则返回0 */ int InitializeHeap (Heap * const pheap, const int capacity) ; /* 操作: 确定一个二叉堆是否为空 */ /* 操作前: pheap 指向一个已初始化的二叉堆 */ /* 操作后: 如果该堆为空, 返回1; 否则返回0 */ int HeapIsEmpty (const Heap * const pheap) ; /* 操作: 确定一个二叉堆是否已满 */ /* 操作前: pheap 指向一个已初始化的二叉堆 */ /* 操作后: 如果该堆已满, 返回1; 否则返回0 */ int HeapIsFull (const Heap * const pheap) ; /* 操作: 将一个数据插入到一个已初始化的二叉堆中 */ /* 操作前: pheap 指向一个已初始化的二叉堆, item 是准备插入的数据 */ /* 操作后: 如果堆未满, 则将 item 插入堆中, 返回1; 否则返回0 */ int Insert (const Heap * const pheap, const Item item) ; /* 操作: 删除堆中的最小元素 */ /* 操作前: pheap 指向一个已初始化的堆 */ /* 操作后: pheap 指向的二叉堆中的最小元被删除并被返回 */ Item DeleteMin (const Heap * const pheap) ; /* 操作: 降低在二叉堆中指定位置处的关键字的值 */ /* 操作前: pheap 指向一个已初始化的二叉堆, position 是用来指定在堆中位置的变量, triangle 是降低的幅度值 */ /* 操作后: 如果二叉堆不为空, 在二叉堆中存在位置 position 并且 triangle > 0, 则二叉堆中 position 处的关键字被降低 triangle, 返回1; 否则返回0 */ int DecreaseKey (const Heap * const pheap, const int position, const Item triangle) ; /* 操作: 增加在二叉堆中指定位置处的关键字的值 */ /* 操作前: pheap 指向一个已初始化的二叉堆, position 是用来指定在堆中位置的变量, triangle 是增加的幅度值 */ /* 操作后: 如果二叉堆不为空, 在二叉堆中存在位置 position 并且 triangle > 0, 则二叉堆中 position 处的关键字被增加 triangle, 返回1; 否则返回0 */ int IncreaseKey (const Heap * const pheap, const int position, const Item triangle) ; /* 操作: 删除在二叉堆中指定位置处的元素 */ /* 操作前: pheap 指向一个已初始化的二叉堆, position 是用来指定在堆中位置的变量 */ /* 操作后: 如果二叉堆不为空, 在二叉堆中存在位置 position, 将 position 位置处的元素从二叉堆中删除, 返回1; 否则返回0 */ int Delete (const Heap * const pheap, const int position) ; /* 操作: 以一个数组作为输入将其放入一个空二叉堆中 */ /* 操作前: pheap 指向一个已初始化的空二叉堆, array 是数据数组, array_size 是指示数组大小的变量 */ /* 操作后: 如果二叉堆为空, 并且数组大小<=二叉堆大小, array 数组中的内容被添加到空二叉堆中, 返回1; 否则返回0 */ int BuildHeap (const Heap * const pheap, const Item * const array, const int array_size) ; /* 操作: 从二叉堆数组低索引向高索引依次将一个函数作用于二叉堆中所有元素1次 */ /* 操作前: pheap 指向一个已初始化的二叉堆, pfun 指向一个没有返回值, 接受一个Item类型参数的函数 */ /* 操作后: pfun 指向的函数被依次作用于二叉堆中的所有元素1次 */ void Traversal (const Heap * const pheap, void (* pfun) (const Item item)) ; /* 操作: 释放一个二叉堆所占用的内存空间 */ /* 操作前: pheap 指向一个已初始化的二叉堆 */ /* 操作后: 该二叉堆所占用的内存空间被释放 */ void Release (const Heap * const pheap) ;