一般采用2插树来实现大堆根
但不只于,
#include<iostream>
#include<queue>
#include<string>
using namespace std;
class Empty{
private:
string message;
public:
Empty(string str="The number of elements is 0") ;
string what(){return message;}
};
template<class T>
class maxDHeap{ 用数组表示
public:
maxDHeap(int init=20,int D=2);
// ~maxDHeap(){delete [] heap;}
~maxDHeap(){;}//init初始化已有的数组不用释放
void push(const T& theElement);
void pop();
void initialize(T* theHeap,int theSize);//初始化一个非空大根堆 传进去一个没排序好的
void show();
int maxChild(int leaf);//传进去的是根序号,返回最大孩子序号
int findFather(int child);//返回父节点序号
void changeMax(const T& theElement);
private:
T* heap;
int heapSize;
int arrayLength;
int D;
};
template<class T>
maxDHeap<T>::maxDHeap(int init,int d){
arrayLength=init;
heap=