資源描述:
《哈夫曼編碼解碼實(shí)驗(yàn)報(bào)告.doc》由會(huì)員上傳分享,免費(fèi)在線閱讀,更多相關(guān)內(nèi)容在行業(yè)資料-天天文庫。
1、.哈夫曼編碼解碼實(shí)驗(yàn)1.實(shí)驗(yàn)要求掌握二叉樹的相關(guān)概念掌握構(gòu)造哈夫曼樹,進(jìn)行哈夫曼編碼。對編碼內(nèi)容通過哈夫曼樹進(jìn)行解碼。2.實(shí)驗(yàn)內(nèi)容通過二叉樹構(gòu)造哈夫曼樹,并用哈夫曼樹對讀取的txt文件進(jìn)行哈夫曼編碼。編碼完成后通過哈夫曼樹進(jìn)行解碼。#include#include#defineMAX100//定義哈夫曼樹的存儲(chǔ)結(jié)構(gòu)typedefstruct{chardata;intweight;intparent;intlch;intrch;}HuffNode;//定義哈夫曼編碼的存儲(chǔ)結(jié)構(gòu)typed
2、efstruct{charbit[MAX];intstart;}HuffCode;HuffNodeht[2*MAX];HuffCodehcd[MAX];intCoun[127]={0};intn;chars1[200000];chartext[5000];//構(gòu)造哈夫曼樹voidHuffmanTree(){Word文檔.inti,j,k,left,right,min1,min2;//printf("輸入葉子的節(jié)點(diǎn)數(shù):");//scanf("%d",&n);printf("字符數(shù)量=%d",n);for(i=1;i<=
3、2*n-1;i++){ht[i].parent=ht[i].lch=ht[i].rch=0;}j=0;for(i=1;i<=n;i++){/*getchar();printf("輸入第%d個(gè)葉子節(jié)點(diǎn)的值:",i);scanf("%c",&ht[i].data);printf("輸入該節(jié)點(diǎn)的權(quán)值:");scanf("%d",&ht[i].weight);*/for(;j<127;j++){if(Coun[j]!=0){ht[i].data=j;//printf("%c",ht[i].data);ht[i].weight=C
4、oun[j];//printf("%d",ht[i].weight);break;}}j++;}printf("");for(i=1;i<=n;i++){printf("%c",ht[i].data);}printf("");for(i=n+1;i<=2*n-1;i++){//在前n個(gè)結(jié)點(diǎn)中選取權(quán)值最小的兩個(gè)結(jié)點(diǎn)構(gòu)成一顆二叉樹min1=min2=10000;//為min1和min2設(shè)置一個(gè)比所有權(quán)值都大的值left=right=0;for(k=1;k<=i-1;k++){if(ht[k].parent==0)//
5、若是根結(jié)點(diǎn)//令min1和min2為最小的兩個(gè)權(quán)值,left和rightWord文檔.為權(quán)值最小的兩個(gè)結(jié)點(diǎn)位置if(ht[k].weight6、[i].lch=left;ht[i].rch=right;}}//構(gòu)造哈夫曼編碼voidHuffmanCode(){inti,c,k,f;HuffCodecd;for(i=1;i<=n;i++){cd.start=n;c=i;f=ht[i].parent;while(f!=0){if(ht[f].lch==c)cd.bit[cd.start]='0';elsecd.bit[cd.start]='1';cd.start--;c=f;f=ht[f].parent;}Word文檔.hcd[i]=cd;}printf("輸出哈夫
7、曼編碼:");for(i=1;i<=n;i++){printf("%c:",ht[i].data);for(k=hcd[i].start+1;k<=n;k++)printf("%c",hcd[i].bit[k]);printf("");}}//對字母進(jìn)行編碼voidCode()//將字符與相應(yīng)的哈夫曼編碼進(jìn)行匹配,輸出編碼結(jié)果{inti=0,j,k,h=0;while(text[i]!='