堆实际上是二叉堆,二叉堆是优先队列的一种实现方式,最常用的使用数组来实现。
堆具有如下两个性质:结构性和堆序性
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){
fprintf(stderr, "there is no space\n");
return NULL;
}
memset(heap->element, 0, sizeof(ElementType)*(MaxElement+1));
h

本文介绍了堆,特别是二叉堆作为优先队列的实现方式。堆具有完全填充的二叉树结构和堆序性质。堆的初始化、插入元素(建立堆)以及删除最小值的操作被详细阐述。通过示例展示了堆的遍历和删除过程,输出结果验证了堆的正确性。
最低0.47元/天 解锁文章
1541

被折叠的 条评论
为什么被折叠?



