复制内容到剪贴板
代码:
#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;
}
*/