最大二叉堆算法实现
#include<iostream>
using namespace std;
class BinaryHeap
{
public:
int a[100];
int capacity;
BinaryHeap()
{
capacity=0;
}
int size()
{
return capacity;
}
void add()
{
char p;
cout<<"输入值:";
cin>>p;
if(p>=48||p<=57)
{
a[capacity]=p-48;
capacity++;
}
int i=capacity-1;
while(i>0)
{
int t;
t=i;
i=(i-1)/2;
if(a[i]<a[t]&&i>=0)
{
int p;
p=a[i];
a[i]=a[t];
a[t]=p;
}
}
}
void print()
{
for(int i=0;i<capacity;i++)
{
cout<<a[i]<<endl;
}
}
int get()
{
return a[0];
}
void remove()
{
int i=0,p;
a[0]=a[capacity-1];
capacity--;
while((a[2*(i+1)-1]>a[i]||a[2*(i+1)]>a[i])&&2*(i+1)<capacity)
{
if(a[2*(i+1)-1]>a[i]&&a[2*(i+1)]>a[i])
{
if(a[2*(i+1)-1]>a[2*(i+1)])
{
p=a[i];
a[i]=a[2*(i+1)-1];
a[2*(i+1)-1]=p;
i=2*(i+1)-1;
}
else
{
p=a[i];
a[i]=a[2*(i+1)];
a[2*(i+1)]=p;
i=2*(i+1);
}
}
else if(a[2*(i+1)-1]>a[i])
{
p=a[i];
a[i]=a[2*(i+1)-1];
a[2*(i+1)-1]=p;
i=2*(i+1)-1;
}
else if(a[2*(i+1)]>a[i])
{
p=a[i];
a[i]=a[2*(i+1)];
a[2*(i+1)]=p;
i=2*(i+1);
}
}
}
bool empty()
{
if(capacity)
{
return false;
}
else
{
return true;
}
}
void clear()
{
capacity=0;
}
};
void main()
{
BinaryHeap b;
for(int i=0;i<5;i++)
{
b.add();
}
b.print();
b.remove();
cout<<endl;
b.print();
}