本文主要对二叉堆的主要实现进行分析。首先,还是给出上文中二叉堆的定义。
template <class T>class MaxHeap{
private:
T *mHeap; // 数据
int mCapacity; // 总的容量
int mSize; // 实际容量 private:
// 最大堆的向下调整算法
void filterdown(int start, int end);
// 最大堆的向上调整算法(从start开始向上直到0,调整堆)
void filterup(int start);
public:
MaxHeap();
MaxHeap(int capacity);
~MaxHeap();
// 返回data在二叉堆中的索引
int getIndex(T data);
// 删除最大堆中的data
int remove(T data);
// 将data插入到二叉堆中
int insert(T data);
// 打印二叉堆
void print();};
MaxHeap是最大堆的对应的类。它包括的核心内容是"添加"和"删除",理解这两个算法,二叉堆也就基本掌握了。下面对它们进行介绍。
二叉堆添加元素
假设在最大堆[90,80,70,60,40,30,20,10,50]种添加85,需要执行的步骤如下: