資料結構 哈夫曼樹的實現以及編碼(C語言實現)

2021-09-02 04:42:01 字數 1076 閱讀 8898

利用哈夫曼編碼進行通訊可以大大提高通道利用率,縮短資訊傳輸時間,降低傳輸成本。構造哈夫曼樹時,首先將由n個字

符形成的n個葉子結點存放到陣列huffnode的前n個分量中,然後根據哈夫曼方法的基本思想,不斷將兩個較小的子樹合併為乙個

較大的子樹,每次構成的新子樹的根結點順序放到huffnode陣列中的前n個分量的後面。

通俗的來講,哈弗曼樹就是一種廣泛應用的二叉樹,哈弗曼樹可以用來構造最優編碼,用於資訊的傳輸,壓縮等方面

哈弗曼樹也可以理解為,最小二叉樹,最優二叉樹。

#define maxvalue 32767

typedef structhnodetype;

typedef structhcodetype;

hnodetype huffnode[8]; //定義全域性變數陣列huffnode存放哈夫曼樹

hcodetype huffcode[8]; //定義全域性變數陣列huffcode存放哈夫曼編碼

int n; //定義全域性變數n表示葉子結點個數

void	createhufftree(void);			//構造哈夫曼樹

void printhufftree(void); //輸出哈夫曼樹

void createhuffcode(void); //構造哈夫曼編碼

void printhuffcode(void); //輸出每個葉子結點的哈夫曼編碼

void createhufftree(void)

printf("輸入%d個節點的權值\n",n);

for(i=1;i<=n;i++)

scanf("%d",& huffnode[i].weight);//輸入n個葉子節點的權值

for(i=1;i程式執行結果如下

資料結構 15 哈夫曼樹以及哈夫曼編碼的實現

參考書籍 資料結構 c語言版 嚴蔚敏吳偉民編著清華大學出版社 假設有n個權值,試構造一棵含有n個葉子結點的二叉樹,每個葉子節點帶權為wi,則其中帶權路徑長度wpl最小的二叉樹叫做最優二叉樹或者哈夫曼樹。特點 哈夫曼樹中沒有度為1的結點,故由n0 n2 1以及m n0 n1 n2,n1 0可推出m 2...

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

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

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

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