C小加

厚德 博学 求真 至善 The bright moon and breeze
posts - 145, comments - 195, trackbacks - 0, articles - 0
  C++博客 :: 首页 :: 新随笔 :: 联系 :: 聚合  :: 管理

优先队列(二叉堆)模板

Posted on 2012-09-15 14:40 C小加 阅读(2630) 评论(0)  编辑 收藏 引用 所属分类: 数据结构和算法模板
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==0return 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;

}


只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理