1、堆的概念及特性
如果有一个关键码的集合K={k0,k1,k2,...,kn-1},把它的所有元素按完全二叉树的顺序存储方式存储在一个一维数组中,并满足:Ki<=K2i+1且Ki<=K2i+2(Ki>=K2i+1且Ki<=K2i+2)i=0,1,2...,则称为小堆(或大堆)。将根结点最大的堆叫做最大堆或大根堆,根结点最小的堆叫做最小堆或小根堆。
堆的性质:
- 堆中某个节点的值总是不大于或不小于其父节点的值;
- 堆总是一棵完全二叉树。
2、堆的实现
实现堆的部分接口,具体内容详见头文件中的注释。
Heap.h
typedef int HPDatatype;
typedef struct Heap
{
HPDatatype* _array;
int _capacity;
int _size;
}Heap;
//用数组初始化堆
void InitHeap(Heap* hp, HPDatatype* array, int size);
//初始化一个空堆
void InitEmptyHeap(Heap* hp, int capacity);
//在堆中插入值为data的元素
void InsertHeap(Heap* hp, HPDatatype data);
//删除堆顶元素
void EraseHeap(Heap*