1. 程式人生 > >優先佇列(二叉堆)模板

優先佇列(二叉堆)模板

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==0return0;
    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];
        
elsebreak
;

    }
    Tarr[i]
=lastem;

    
return minem;
}

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

}