哈夫曼樹建立和解碼

2021-10-01 08:57:29 字數 2454 閱讀 1040

題目描述

假設某通訊報文的字符集由a,b,c,d,e,f這6個字元組成,它們在報文**現的頻度(頻度均為整數值)。

(1)構造一棵哈弗曼樹,依次給出各字元編碼結果。

(2)給字串進行編碼。

(3)給編碼串進行解碼。

規定:構建哈弗曼樹時:左子樹根結點權值小於等於右子樹根結點權值。

生成編碼時:左分支標0,右分支標1。

輸入第一行:依次輸入6個整數,依次代表a,b,c,d,e,f的頻度,用空格隔開。

第二行:待編碼的字串

第三行:待解碼的編碼串

輸出前6行依次輸出各個字元及其對應編碼,格式為【字元:編碼】(冒號均為英文符號)

第7行:編碼串

第8行:解碼串

樣例輸入 copy

3 4 10 8 6 5

bee0010000100111101

樣例輸出 copy

a:000

b:001

c:10

d:01

e:111

f:110

001111111

badbed

#include

#include

#include

#define n 6

#define m 2*n-1

#define maxint 32767

#define ch 30

#define num 100

typedef

struct

htnode,huffmantree[m]

;typedef

char

* huffmancode[n]

;void

select

(huffmantree ht,

int pos,

int*s1,

int*s2)

else

if(ht[j]

.weight.parent==-1

)}}void

crthuffmantree

(huffmantree ht,

int w,

int n)

for(i = n;i < m;i++

)for

(i = n;i < m;i++)}

void

crthuffmancode

(huffmantree ht,huffmancode hc ,

int n)

else

c = p;

p = ht[p]

.parent;

} hc[i]=(

char*)

malloc

((n - start)

*sizeof

(char))

;strcpy

(hc[i]

,&cd[start]);

}free

(cd);}

void

printcode

(char s[

],huffmancode hc)

}void

alphagetnum

(char charcode,

char s[

],huffmancode hc)

} p++;}

}void

numgetalpha

(char charnum[

],huffmantree ht,

char s)

p++;}

printf

("%c\n"

,s[key]);

}}intmain()

;printf

("please enter weights:");

for( i =

0;i < n;i++

)printf

("please enter the code:");

scanf

("%s"

, charcode)

;printf

("please enter the password:");

scanf

("%s"

,charnum)

;crthuffmantree

(ht,w,6)

;//建立哈夫曼樹

crthuffmancode

(ht,hc,6)

;//哈夫曼編碼,將每個字元得權值編成哈夫曼編碼

printcode

(s, hc)

;//將每個字元的哈夫曼編碼輸出

alphagetnum

(charcode,s,hc)

;//字元得到密碼

printf

("\n");

numgetalpha

(charnum,ht,s)

;//密碼得到字元

}

哈夫曼樹建立和哈夫曼碼生成

直接上 htree.h typedef struct htreenode htreenode main.cpp include include include include htree.h htreenode inithtree int num 初始化哈夫曼樹結點 void getmin htre...

哈夫曼樹的建立和編碼

演算法思路 以權值分別為w1,w2 的 各結點,構成n棵二叉樹t1,t2,tn並組成森林f 其中每棵二叉樹 ti僅有乙個權值為 wi的根結點 2 在f中選取兩棵根結點權值最小的樹作為左右子樹構造一棵新二叉樹,並且置新二叉樹根結點權值為左右子樹上根結點的權值之和 根結點的權值 左右孩子權值之和,葉結點...

c 哈夫曼樹的建立 編碼 解碼

哈夫曼樹的建立和編碼 include includeusing namespace std typedef struct hthtnode,huffmantree typedef char huffmancode void select huffmantree ht,int k,int s1,int...