最小堆建立以及過程中的疑惑
阿新 • • 發佈:2019-01-30
最小堆結構體
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、錯誤:出現程式錯誤,跑不起來,要想一想,是不是空間不夠了,申請的空間夠用了麼
下面是最小堆的建立