1. 程式人生 > >最小堆建立以及過程中的疑惑

最小堆建立以及過程中的疑惑

最小堆結構體

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、錯誤:出現程式錯誤,跑不起來,要想一想,是不是空間不夠了,申請的空間夠用了麼

下面是最小堆的建立