首先,先介绍一下堆的两个特性:
1. 结构性:用数组表示的完全二叉树
2. 有序性:任一结点的关键字是其子树所有结点的最大值(或最小值)
然后,我们正式开始介绍堆的基本操作,本文以最大堆为例,介绍了如下几个操作:
1. 创建一个空的最大堆
2. 判断最大堆是否满
3. 判断最大堆是否空
4. 将元素插入最大堆
5. 删除最大堆的最大元素并返回其值
具体完整代码如下:
#include <stdio.h>
#include <stdlib.h>
#include <iostream>
#include <malloc.h>
#define ElemType int
#define Status int
#define OK 0
#define ERROR -1
#define MAX_VALUE 1000
using namespace std;
/* 由于堆的结构满足完全二叉树的形式,所以通过数组实现对堆的存储 */
typedef struct heap {
ElemType* val;
int size;
int maxsize;
} *maxheap;
/* 判断堆是否满 */
int IsFull(maxheap mh)
{
if(!mh)
return ERROR;
return (mh->size == mh->maxsize);
}
/* 判断堆是否空 */
int IsEmpty(maxheap mh)
{
if(!mh)
return ERROR;
return (mh->size == 0);
}
/* 构造堆 */
maxhea