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

最小堆结构体

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

下面是最小堆的创建

猜你喜欢

转载自blog.csdn.net/leafdown_/article/details/78757758