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

最小堆结构体

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

下面是最小堆的创建

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值