论坛首页· 友情链接申请·申请版主· 广告投放· 道具中心· 设为首页· 收藏本站
发新话题
打印

c++实现最大堆源码

c++实现最大堆源码

复制内容到剪贴板
代码:
#include <iostream>
using namespace std;
enum RestultCode{NoMemory,OutOfBounds,Underflow,Overflow,Duplicate};
/*最大堆类*/
template <class T>
class MaxHeap
{
private:
  T *q;
  int n,maxSize;
  void AdjustDown(int r,int j);
  void AdjustUp(int j);
public:
  MaxHeap(int mSize=100);
  ~MaxHeap(){delete []q;};
  void Put(const T &x);
  T Remove();
  bool IsEmpty() const{return n==0;}
  bool IsFull() const{return n==maxSize;}
};
template<class T>
MaxHeap<T>::MaxHeap(int mSize)
{
maxSize=mSize;n=0;
q=new T[maxSize];
}
template<class T>
void MaxHeap<T>::AdjustDown(int r,int j)
{
int child=2*r+1;
T temp=q[r];
while(child<=j){
  if((child<j)&&(q[child]<q[child+1])) child++;
  if(temp>=q[child]) break;
  q[(child-1)/2]=q[child];
  child=2*child+1;}
q[(child-1)/2]=temp;
}
template <class T>
void MaxHeap<T>::AdjustUp(int j)
{
int i=j;
T temp=q;
while(i>0&&temp>q[(i-1)/2]){
  q=q[(i-1)/2];
  i=(i-1)/2;
}
q=temp;
}
template <class T>
void MaxHeap<T>::Put(const T &x)
{
if(IsFull()) throw Overflow;
q[n++]=x;
AdjustUp(n-1);
}
template <class T>
T MaxHeap<T>::Remove()
{
T x;
if(IsEmpty()) throw Underflow;
x=q[0];
q[0]=q[--n];
AdjustDown(0,n-1);
return x;
}
/*
void main()
{
int a,b;
MaxHeap<int> heap;
heap.Put(5);
heap.Put(6);
a=heap.Remove();
b=heap.Remove();
cout<<a<<b<<endl;
}
*/
本帖最近评分记录
  • Beverly 学分 +10 2008-12-1 20:21

TOP

谢谢分享!
从易做事,从简做人。埋头做事,低头做人。不予他求,只扪自力。休言酸骚,命运求己。

TOP

发新话题