一、Heap.h
#pragma once
#include <stdio.h>
#include <stdlib.h>
#include <assert.h>
#include <stdbool.h>
// 堆结构体
typedef int HPDataType;
typedef struct Heap
{
HPDataType* a;
int size;
int capacity;
}HP;
//向上调整算法
void AdjustUp(int* a, int child);
//向下调整算法
void AdjustDown(int* a, int n, int parent);
//交换函数
void Swap(HPDataType* px, HPDataType* py);
// 堆的初始化
void HeapInit(HP* hp);
// 堆的销毁
void HeapDestroy(HP* hp);
// 堆的插入
void HeapPush(HP* hp, HPDataType x);
// 堆的删除
void HeapPop(HP* hp);
//取堆顶的数据
HPDataType HeapTop(HP* hp);
//堆的打印
void HeapPrint(HP* hp);
// 堆的判空
bool HeapEmpty(HP* hp);
// 堆的数据个数
int HeapSize(HP* hp);
二、Heap.c
#include "Heap.h"
void Swap(HPDataType* px, HPDataType* py)
{
HPDataType tmp = *px;
*px = *py;
*py = tmp;
}
void HeapInit(HP* hp)
{
assert(hp);
hp->a = NULL;
hp->size = hp->capacity = 0;
}
void HeapDestroy(HP* hp)
{
assert(hp);
free(hp->a);
hp->capacity = hp->size = 0;
}
void AdjustUp(i