哈夫曼編碼與解碼

2021-08-19 06:08:50 字數 2295 閱讀 8873

#include#include

#include

#include

#define maxnum 60typedef

struct

huffnode;

typedef

struct

huffcode;

huffnode ht[maxnum*2]; //

存放哈夫曼樹

huffcode hcd[maxnum];

//存放ht陣列中對應的字元的編碼

int n; //

字元的個數

//初始化哈夫曼樹ht

void

initht()

ht[i].left=ht[i].right=ht[i].parent=-1

;

while((ch=fgetc(fp))!=eof)

else

if((ch>='

a' && ch<='

z')||(ch>='

a' && ch<='z'

)) ht[i].ch=ch;

else

if(ch>='

0'&&ch<='9'

) ht[i].weight=ht[i].weight*10+ch-'0'

; }

n=i+1

;

if(fclose(fp))}//

構造哈夫曼樹,看成有n棵樹,選擇權值最小的兩棵樹合併

void

createhufftree()

else

if(f==1

)else

minj=i;

f++;

}else

else

if(ht[i].weightminj=i;}}

i++;

}//合併兩個結點

ht[k].ch='#'

; ht[k].left=mini;

ht[k].right=minj;

ht[k].weight=ht[mini].weight+ht[minj].weight;

ht[k].parent=-1

; ht[mini].parent=ht[minj].parent=k;

}}//

將乙個字串反轉

void reverse(char *str)}//

哈夫曼編碼,通過父節點從下往上找

void

createhuffcode()

else

hcd[i].code[length++]=1+'0'

; j=ht[j].parent;

}hcd[i].start=hcd[i].code[length-1]-'0'

; hcd[i].code[length]='\0'

; reverse(hcd[i].code);

}//把hcd字元編碼寫入檔案document/code.txt中

if((fp=fopen("

document/code.txt

","w

"))==null)

for(i=0;i)

if(fclose(fp))}//

哈夫曼解碼,每次都從根節點開始搜尋

int releasehuffcode(char *str,char*code)

i++;

}str[length]='\0'

;

if(root==2*n-2

)

return1;

return0;

}//使用者輸入編碼字元

void

encode()

; printf(

"\n請輸入要編碼的字串(length<50)\n");

scanf("%s

",str);

while

(str[i])

i++;

}else

}if(f)

puts(code);

else

printf(

"你輸入的字串錯誤!\n");

printf(

"按任意鍵後重新選擇!\n");

getch();}//

使用者輸入解碼字串

void

decode()

//主函式

void

main()

}}

哈夫曼編碼解碼

簡單實現編碼解碼功能 列印哈夫曼樹形 該怎麼做呢 求教!實現初始化,建立huffman樹,並完成字元的編碼 之前解碼用for迴圈不能夠重新復位遍歷 while更好用 include stdio.h include string.h define n 10 待編碼字元的個數,即樹中葉結點的最大個數 d...

哈夫曼(Huffman)編碼與解碼

利用哈夫曼編碼進行資訊通訊可以大大提高通道利用率,縮短資訊傳輸時間,降低傳輸成本。但是,這要求在傳送端通過乙個編碼系統對待傳輸資料預先編碼,在接收端將傳來的資料進行解碼。對於雙工通道,每端都需要乙個完整的編碼 解碼系統。試為這樣的資訊收發站寫乙個哈夫曼的編 解碼系統。乙個完整的系統具有以下幾種操作 ...

哈夫曼編碼和解碼

試題描述 輸入為 一段英文或中文的文章 原文 對輸入的文章構造哈夫曼樹,生成對應的編碼,輸出為 原文所對應的編碼 譯文 根據已經生成的編碼表,輸入任意的譯文可以得到對應的原文。要求有執行結果截圖。include using namespace std typedef struct point huf...