哈夫曼樹編碼c語言實現,實現哈夫曼樹編碼的演算法可分為兩大部分:
(1)構造哈夫曼樹;
(2)在哈夫曼樹上求葉結點的編碼;
哈夫曼樹構造演算法:
(1)由給定的n個權值構造n棵只有乙個葉結點的二叉樹,從而得到乙個二叉樹的集合f=
(2)在f中選取根結點的權值最小和次小的兩棵二叉樹作為左,右子樹構造一棵新的二叉樹,這棵二叉樹根結點的權值為其左右子樹權值之和
(3)在集合f中刪除作為左右子樹的兩棵二叉樹,並將新建立的二叉樹加入到集合f中
(4)重複(2)(3)直到f中只剩下最後一棵所需的二叉樹,就是哈夫曼樹
在哈夫曼樹上求葉結點的編碼演算法:
在已建立的哈夫曼樹中,從葉結點開始,沿結點的雙親鏈回退到根結點,每回退一步,就走過了哈夫曼樹的乙個分支,從而得到一位哈夫曼的值
規定哈夫曼樹中的左分支代表0,右分支代表1
舉例:a:5 b:29 c:7 d:8 e:14 f:23 g:3 h:11
哈夫曼樹:
哈夫曼樹的儲存:
weight parent lchild rchild 5
8 -1
-1 29
13 -1
-1 7
9 -1
-1 8
9 -1
-1 14
11 -1
-1 23
12 -1
-1 3
8 -1
-1 11
10 -1
-1 8
10 0 6
1511 2 3
1912 7 8
2913 4 9
4214 5
10 58
14 1
11 100
-1 12
13 執行結果:
C語言實現哈夫曼編碼
include define n5 葉子數目 define m 2 n 1 結點總數 define maxval 10000.0 define maxsize100 哈夫曼編碼的最大位數 typedef struct hufmtree typedef struct codetype void huf...
哈夫曼編碼 C語言實現
c語言實現哈夫曼編碼 程式功能 提供一段字串,輸出哈夫曼編碼壓縮後的總位元數 計入小寫字母和空格 include include 定義二叉樹結構 typedef struct node bitnode,bitree 定義棧結構,此處的棧用來儲存二叉樹節點 typedef structstack 操作...
C語言實現哈夫曼編碼
include include define n 50 葉子結點數 define m 2 n 1 樹中結點總數 typedef struct htnode typedef struct hcode void createht htnode ht,int n 由ht的葉子結點構造完整的哈夫曼樹 els...