huffmancode.h
#ifndef _huffmancode_h_
#define _huffmancode_h_
#include
typedef
struct
htnode,
*huffmantree;
typedef
char
** huffmancode;
void
huffmancoding
(huffmantree *ht, huffmancode *hc,
int*w,
int n)
;#endif
huffmancode.c
#include
"huffmancode.h"
#include
#include
#include
#include
void
select
(huffmantree ht,
int n,
int*s1,
int*s2)
;void
huffmancoding
(huffmantree *ht, huffmancode *hc,
int*w,
int n)
for(
; i <= m;
++i,
++p)
for(i = n +
1; i <= m;
++i)
// - - - 從葉子到根逆向求每個字元的哈夫曼編碼 - - -
(*hc)
=(huffmancode)
malloc
((n+1)
*sizeof
(char*)
);//分配n個字元編碼的頭指標向量
char
*cd =
(char*)
malloc
(n*sizeof
(char))
;//分配求編碼的工作空間
cd[n-1]
='\0'
;for
(i =
1; i <= n;
++i)
*/strcpy((
*hc)
[i],
&cd[start]);
}free
(cd);}
void
select
(huffmantree ht,
int n,
int*s1,
int*s2)
} ht[
*s1]
.parent =1;
for(
int i =
1; i <= n;
++i)}if
(*s1>
*s2)
//printf("%d\n%d\n",*s1,*s2);
}
main.c
#include
#include
"huffmancode.h"
int main ();
huffmancoding
(&t,
&c, w,8)
;for
(int i =
1; i <=
8; i++
)return0;
}
執行示例:
執行結果:
哈夫曼樹及哈夫曼編碼
哈夫曼樹,最優二叉樹,帶權路徑長度 wpl 最短的樹。它沒有度為1的點,是一棵嚴格的二叉樹 滿二叉樹 了解哈夫曼樹,我們首先要知道樹的幾個相關術語,並了解什麼是wpl。注 樹的wpl這個概念非常重要,這個公式直接產生了哈夫曼編碼資料壓縮的應用 根據給定的n個權值構成n棵二叉樹的集合f 其中每棵二叉樹...
哈夫曼樹及哈夫曼編碼
給定n個權值作為n個葉子結點,構造一棵二叉樹,若帶權路徑長度達到最小,稱這樣的二叉樹為最優二叉樹,也稱為哈夫曼樹 huffman tree 哈夫曼樹是帶權路徑長度最短的樹,權值較大的結點離根較近。樹節點間的邊相關的數叫做權。從樹中的乙個節點到另乙個節點之間的分支構成兩個點之間的路徑,路徑上的分支數目...
哈夫曼樹及哈夫曼編碼 C
說明 1.讀取檔案中需進行哈夫曼編碼的資料資訊 2.構造生成單節點二叉樹組 森林 3.構造哈夫曼樹 4.進行哈夫曼編碼 5.輸出對應資料及其編碼 include include includeusing namespace std const int max n 100 最大容量 const int...