您的位置:首页 > 其它

最小堆创建以及过程中的疑惑

2017-12-10 19:34 92 查看
最小堆结构体

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、错误:出现程序错误,跑不起来,要想一想,是不是空间不够了,申请的空间够用了么

下面是最小堆的创建
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: