堆的两个特性
- 结构性:用数组表示的完全二叉树
- 任意节点的关键字是其子树所有节点的最大值(或最小值)
- 最大堆(MaxHeap)也称“大顶堆”:最大值
- 最小堆(MinHeap)也称“小顶堆”:最小值
也就是从根节点到任意节点路径上节点序列的有序性
ADT
最大堆的操作
最大堆的创建
typedef struct HeapStruct *MaxHeap;
struct HeapStruct{
ElementType *Elements; //存储堆元素的
int Size; //堆当亲元素个数
int Capacity; //堆的最大容量
};
//创建容量为MaxSize的空的最大堆
MaxHeap Create(int MaxSize)
{
MaxHeap H = malloc(sizeof(struct HeapStruct));
H->Elements = malloc((MaxSize+1)*sizeof(ElementType));
H->Size = 0;
H->Capacity = MaxSize;
H->Elements[0] = MaxData; //定义哨兵为大于堆中所有可能元素的值便于以后更快操作
return H;
}
//算法:将新增节点插入到从其父节点到根节点的有序序列中
void Insert(MaxHeap H, ElementType item)
{
//将元素item插入到最大堆H,其中H->Elements[0]已经定义为哨兵
int i;
if(IsFull(H))