Heap模板类
闲来无事写了一个heap模板类,不支持自动扩容,需要预先指定空间大小,支持插入,删除,返回最大值,没有实现赋值功能,代码细节不够完美,挂在这里留待以后修改。
代码如下
template<typename T> class heap{
private:
T* elem;
int size;
int capa;
public:
heap():elem(NULL){}
heap(int _capa):elem(NULL),capa(_capa){
elem = new T[capa+1];
size = 0;
}
bool empty(){
return size==0;
}
bool insert(const T& inser){
if (size+1>capa)
return false;
int k = ++size;
while (k>1&&elem[k/2]<inser){
elem[k] = elem[k/2];
k/=2;
}
elem[k] = inser;
return true;
}
bool dele(){
if (empty())
return false;
T tmp = elem[size--];
int child,father;
for (father=1;father*2<=size;father=child){
child = father*2;
if (child+1<=size&&elem[child]<elem[child+1])
child = child+1;
if (elem[child]<tmp)
break;
elem[father] = elem[child];
}
elem[father] = tmp;
return true;
}
T top(){
return elem[1];
}
~heap(){delete[] elem;}
};