最小堆结构体
typedef Edge ElementType_stack;
struct HNode{
//最小堆里边的元素是边Edge
ElementType_stack data[MaxVertexNum];//开辟好多好多个Edge类型的
int size;//堆中元素的个数
int capacity;//堆的最大容量
};
typedef struct HNode *minHeap;
1、疑惑:用数组开辟了很多个存放data的空间,所以不用malloc空间,但是data是一个Edge类型的结构体,还需要申请空间吗
测试一下
在creatHeap函数里,直接赋值,(此时没有创建Edge的malloc),在main里边直接访问 H->data[1]->v1,出错了
minHeap creatHeap(){
minHeap H=(minHeap)malloc(sizeof(struct HNode));
H->size=0;//当前的元素个数为0
H->capacity=MaxVertexNum;//最大的容量
//H->data[0]->weight=minData;//建立一个哨兵,小于堆中所有的元素
H->data[1]->v1=4;
return H;
}
错误点:需要给data申请Edge类型的空间
需要在creatHeap()里边加入
for(i=0;i<MaxVertexNum;i++){
H->data[i]=(Edge)malloc(sizeof(struct ENode));
}
再在creatHeap()中写入下面代码,在主函数中调用这两个值,都可以调用了,说明真的要申请空间!!!
H->data[0]->weight=minData;//建立一个哨兵,小于堆中所有的元素
H->data[3]->weight=4;
2、错误:出现程序错误,跑不起来,要想一想,是不是空间不够了,申请的空间够用了么
下面是最小堆的创建