一般数据结构中的堆指的是二叉堆(Binary heap)。堆是一棵完全二叉树,可用数组来表示。对于数组中任意位置i上的元素,其左儿子在位置2i上,右儿子在左儿子后的单元(2i+1)中,它的父亲在位置[i/2](整数除法)上。
在堆实现过程中下表为0的元素作为标记(这个值必须小于其中的任何一个值),用标记只是为了减少判断次数。
fatal.h定义错误处理
#include <stdio.h>
#include <stdlib.h>
#define Error(Str) fprintf(stderr, "%s\n", Str),exit(1)
#define FatalError(Str) Error(Str)
binheap.h函数声明
typedef int ElementType;
#ifndef BINHEAP_H
#define BINHEAP_H
typedef unsigned int Position;
struct HeapStruct
{
int Capacity;
int Size;
ElementType *Elements;
};
typedef struct HeapStruct *PriorityQueue;
PriorityQueue Initialize(int MaxElements);//初始化堆
void Destory(PriorityQueue H);//销毁堆
int IsFull(PriorityQueue H);//是否已满
int IsEmpty(PriorityQueue H);//是否为空
void MakeEmpty(PriorityQueue H);//清空堆
void Insert(ElementType X, PriorityQueue H);//插入元素
ElementType Del