堆实际上是二叉堆,二叉堆是优先队列的一种实现方式,最常用的使用数组来实现。
堆具有如下两个性质:结构性和堆序性
1、结构性
堆是一个被完全填满的二叉树(底层有例外)
2、堆序性
子节点元素值都小于父节点元素值
既然堆是优先队列就满足priority queue的基本性质,Insert和DeletMin
堆的初始化
typedef int ElementType;
typedef struct HeapStruct * HeapNode;
typedef HeapNode PriorityHeap;
struct HeapStruct{
int capacity;
int size;
ElementType *element;
};
其中memset防止分配到的空间,存在脏数据
MaxElement+1,如果是char类型,后面会有一个结束符
static PriorityHeap Initialize(int MaxElement)
{
PriorityHeap heap = NULL;
heap =(PriorityHeap)malloc(sizeof(*heap));
if(heap==NULL){
fprintf(stderr, "there is no space\n");
return NULL;
}
memset(heap,0,sizeof(*heap));
heap->element = (ElementType *)malloc((MaxElement+1)*sizeof(ElementType));
if(heap->element==NULL){
fprint