第一个C++ 程序 类的定义
#include <iostream>using std::cout;
using std::cin;
using std::endl;
class heapify
{
public:
heapify(int n); //构造函数
~heapify() {delete [] a;}
void heapify_init(int *s,int n); //初始化堆操作
void heapify_output();
private:
void heapify_build(); //建立最大堆
void heapify_max(int i);
int *a; //数组堆的首地址
int n1; //数组的大小的上限
int n2; //已使用堆的大小
};
heapify::heapify(int n)
{
a=new int[n];
n1=n;
}
void heapify::heapify_max(int i) // 比较节点和节点的左右节点,看是否节点是最大的,如果不是则将节点值置为最大
{
int left=2*i+1,right=2*i+2,largest,key; //置换后,查看被交换的左节点或者右节点是否满足最大堆的要求,如果不满足则调整
largest=i;
if(left<=n2&&*(a+left)>*(a+i))
largest=left;
if(right<=n2&&*(a+right)>*(a+largest))
largest=right;
if(i!=largest){
key=*(a+largest);
*(a+largest)=*(a+i);
*(a+i)=key;
heapify_max(largest);
}
}
void heapify::heapify_build() //堆的建立,调整0-n2/2节点使其满足最大堆的属性,因为n2/2之后的元素都是叶子节点,其为自身
{
for(int i=n2/2;i>=0;i--)
heapify_max(i);
}
void heapify::heapify_init(int *s,int n)
{
n2=n;
if(n>n1){
printf("overflow");
exit(0);
}
for(int i=0;i<n;i++)
*(a+i)=*(s+i);
heapify_build();
}
void heapify::heapify_output()
{
for(int i=0;i<n2;i++)
cout << *(a+i) << ' ';
cout <<endl;
}
void main()
{
int a[20];
heapify myheapify(20);
for(int i=0;i<20;i++){
cin >> *(a+i);
if(*(a+i)==-1)
break;
}
myheapify.heapify_init(a,i);
myheapify.heapify_output();
}
怎么感觉就是 在用C写程序呢 ?