c 哈夫曼編碼

2021-10-05 00:10:44 字數 1797 閱讀 4613

哈夫曼編碼的基本步驟:

(1)把概率最小的兩個符號組成乙個新的節點

(2)重複步驟,直到概率和為1

(3)總根節點開始到相應於每個符號的「樹葉」,概率大的標「1」,概率小的標「0」

(4)從根節點開始,對符號進行編碼

1、定義結構體

typedef

struct

htnode;

typedef

struct

htnode;

2、mian函式,呼叫huffman函式進行編碼,並計算編碼的平均長度

void

main()

printf

("\n 哈夫曼編碼的平均碼長是:%f\n"

,l);

getchar()

;等待使用者按任意鍵返回,阻止執行黑框閃退問題

for(i=

1;i<=n;i++

)printf

("\n %c的編碼結果是:%s"

,hc[i]

.data,hc[i]

.code)

; l=0;

for(i=

1;i<=n;i++

) l+

=strlen

(hc[i]

.code)

*hc[i]

.weight;

printf

("\n 赫夫曼編碼的平均碼長是: %f\n"

,l);

}

3、建立init,用於初始化待編碼項的名稱和權值

void

init

(htcode hc,

int*n)

printf

("\n 注意:各項帶編碼數的權重之和應該為1 \n"

,*n)

;for

(i=1

;i<=

*n;i++

)}

4、建立huffmancoding函式,其主要的功能是:先構造二叉樹,然後再根據構造的二叉樹,進行哈夫曼編碼

void

huffmancoding

(htnode ht[

],htcode hc,

int n)

for(i=n+

1;i<=m;i++

)for

(i=1

;i<=m;i++

)for

(i=0

;i) cd[n-1]

='\0'

;for

(i=1

;i<=n;i++

)strcpy

(hc[i]

.code,

&cd[start]);

}}

5、建立select函式,用於在剩餘二叉樹根節點和新產生的根節點中選出權值最小的兩項

void

select

(htnode ht,

int k,

int*s1,

int*s2)

}for

(i=1

;i<=k;i++

)for

(i=1

;i<=k;i++)}

for(i=

1;i<=k;i++

)printf

("\n 這是 *s1:%d\n"

,*s1)

;printf

("\n 這是 *s2:%d\n"

,*s2)

;}

哈夫曼編碼 C

我是從 資料結構與演算法 c 語言描述 這本書裡面抄的 程式可以正常執行 using system using system.collections.generic using system.linq using system.text namespace 哈夫曼編碼1 public huffman...

C 哈夫曼編碼

include include include include define hfmlenth 999 define maxcode 10 待輸入字串 char str hfmlenth 編碼 intcode hfmlenth 哈夫曼樹的葉子數 其他節點數 根節點 最大深度 int orilenth...

哈夫曼編碼 哈夫曼樹

1.定義 哈夫曼編碼主要用於資料壓縮。哈夫曼編碼是一種可變長編碼。該編碼將出現頻率高的字元,使用短編碼 將出現頻率低的字元,使用長編碼。變長編碼的主要問題是,必須實現非字首編碼,即在乙個字符集中,任何乙個字元的編碼都不是另乙個字元編碼的字首。如 0 10就是非字首編碼,而0 01不是非字首編碼。2....