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

来源:互联网 发布:瞻博网络 上海 电话 编辑:程序博客网 时间:2024/05/16 07:53
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小加

0 0