C 哈夫曼樹及哈夫曼編碼的實現

2021-08-28 05:27:05 字數 2049 閱讀 3902

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...