您的位置:首页 > 其它

优先队列(二叉堆)模板(template)

2017-05-01 11:10 204 查看
template<class T,int MAX=100003>
class BinaryHeap
{
private:
int Size;
T * Tarr;
public:
BinaryHeap();
void insert(T x);
T deleteMin();
~BinaryHeap();
};

template<class T,int MAX>
BinaryHeap<T,MAX>::BinaryHeap()
{
Tarr=new T[MAX+1];
if(Tarr==NULL) {cout<<"创建数组失败"<<endl;return ;}
Size=0;
}
template<class T,int MAX>
void BinaryHeap<T,MAX>::insert(T x)
{
++Size;
if(Size==MAX) return;
int i;
for(i=Size;Tarr[i/2]>x;i/=2)
Tarr[i]=Tarr[i/2];
Tarr[i]=x;
}
template<class T,int MAX>
T BinaryHeap<T,MAX>::deleteMin()
{
if(Size==0) return 0;
T minem=Tarr[1];
T lastem=Tarr[Size--];
int i,child;
for(i=1;i*2<=Size;i=child)
{
child=i*2;
if(child!=Size-1&&Tarr[child+1]<Tarr[child])
++child;
if(lastem>Tarr[child])
Tarr[i]=Tarr[child];
else
break;

}
Tarr[i]=lastem;

return minem;
}

template<class T,int MAX>
BinaryHeap<T,MAX>::~BinaryHeap()
{
delete[] Tarr;
}


from C小加
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  优先队列