資料結構 哈夫曼樹

2022-05-12 07:48:13 字數 2579 閱讀 5405

經過兩天,不斷的除錯,不斷的改bug,終於按照自己的思想把哈夫曼樹的建立寫出來了,說實話有點辛苦,但是感覺還不錯,感覺挺有成就感的,在**過程中發現了不少的問題,比如不知為何傳遞過去的是指標,是位址,但是他在主函式的值不會改變,需要使用返回值來改變主函式的值,還有使用遞迴無法直接傳遞最後一輪的值給主函式等等一系列問題。

附**:

1 #include"

stdio.h

"2 #include"

stdlib.h"3

//定義哈夫曼節點型別

4 typedef struct

nodehuffman;

10//

初始化哈夫曼

11int length = 0

;12 huffman*creathuffman()

1326

else

2738 p->next =null;

39//

返回h的下乙個節點,h是哈夫曼節點鍊錶的頭結點,這裡直接返回有值的節點就可以了;

40return h->next;41}

42}43//

刪除節點

44 huffman *delnode(huffman *h, int

index)

4554

if(index ==length)

5560 p->next = null; //

因為要刪除的節點是鍊錶中的最後乙個,最後乙個節點的next為null,刪除後就由最後乙個節點的前乙個節點為結束

61 length--;

62return

h;63}64

for(int i = 1; i < index -1; i++) //

移動到要刪除的節點的前乙個

6568 q = p; //

將q指向p的前乙個節點

69 p = p->next; //

p移動到了要刪除的節點

70 q->next = p->next; //

鍊錶中該元素消除

71 length--;

72return

h;73}74

//合併兩個節點,成為乙個新的節點,並將兩個節點作為該節點的左右孩子

75 huffman *mergenode(huffman *h ,huffman *min1, huffman *min2)

7686

else

8792 p->next = newnode; //

將新節點放入節點鍊錶的最後乙個,以便於後面比較大小93}

94 newnode->next =null;

95 length++;

96return

h;97}98

//比較大小,找出兩個最小的值的節點

99 huffman *comparenode(huffman *h)

100106

int index; //

標記最小值的位置

107int count; //

標記當前在第幾個節點

108 huffman *min1,*min2;

109 huffman *p;

110while(h->next !=null)

111125 p = p->next;

126}

127 h = delnode(h, index); //

呼叫刪除節點函式刪除鍊錶中的該節點

128 count = 1; //

節點重頭開始

129 index = 1; //

最小值下標位置置1

130 p = h->next;

131 min2 =h;

132//

尋找第二個最小值

133while(p !=null)

134141 p = p->next;

142}

143 h = delnode(h, index); //

呼叫刪除節點函式刪除鍊錶中的該節點

144 h = mergenode(h , min1, min2);//

呼叫合併節點函式構造乙個新的節點

145146

}147

return

h;148

//h = comparenode(h);

//遞迴呼叫自己

149}

150//

計算總節點個數

151void getlength(huffman *h)

152159

}160

//輸出二叉樹

資料結構 哈夫曼樹 哈夫曼編碼

哈夫曼樹又稱最優樹 二叉樹 是一類帶權路徑最短的樹。構造這種樹的演算法最早是由哈夫曼 huffman 1952年提出,這種樹在資訊檢索中很有用。結點之間的路徑長度 從乙個結點到另乙個結點之間的分支數目。樹的路徑長度 從樹的根到樹中每乙個結點的路徑長度之和。結點的帶權路徑長度 從該結點到樹根之間的路徑...

哈夫曼編碼 哈夫曼樹 (資料結構)

哈夫曼編碼,又稱霍夫曼編碼,是一種編碼方式,哈夫曼編碼是可變字長編碼 vlc 的一種。huffman於1952年提出一種編碼方法,該方法完全依據字元出現概率來構造異字頭的平均長度最短的碼字,有時稱之為最佳編碼,一般就叫做huffman編碼 有時也稱為霍夫曼編碼 include include inc...

資料結構 哈夫曼樹

哈夫曼樹是二叉樹的一種。被稱為最優二叉樹。實際應用中最重要的是帶權路徑長度。樹的路徑長度 樹中每個結點的路徑長度之和。權 附加在樹節點上,表示出現的概率。樹的帶權路徑長度 所有葉子結點帶權長度之和。看例項 的結點路徑長度 從d到 a的路徑,共走了兩條邊,所以為2。樹中的葉子結點有 d,e和 f。結點...