哈夫曼樹編碼以及譯碼——實(shí)驗(yàn)報(bào)告

哈夫曼樹編碼以及譯碼——實(shí)驗(yàn)報(bào)告

ID:45117461

大?。?4.15 KB

頁數(shù):6頁

時間:2019-11-10

哈夫曼樹編碼以及譯碼——實(shí)驗(yàn)報(bào)告_第1頁
哈夫曼樹編碼以及譯碼——實(shí)驗(yàn)報(bào)告_第2頁
哈夫曼樹編碼以及譯碼——實(shí)驗(yàn)報(bào)告_第3頁
哈夫曼樹編碼以及譯碼——實(shí)驗(yàn)報(bào)告_第4頁
哈夫曼樹編碼以及譯碼——實(shí)驗(yàn)報(bào)告_第5頁
資源描述:

《哈夫曼樹編碼以及譯碼——實(shí)驗(yàn)報(bào)告》由會員上傳分享,免費(fèi)在線閱讀,更多相關(guān)內(nèi)容在行業(yè)資料-天天文庫

1、華北水利水電大學(xué)數(shù)據(jù)結(jié)構(gòu)實(shí)驗(yàn)報(bào)告2013~2014學(xué)年第一學(xué)期級計(jì)算機(jī)科學(xué)與技術(shù)專業(yè)班級:學(xué)號:姓名:實(shí)驗(yàn)三:哈夫曼編/譯碼器一.實(shí)驗(yàn)?zāi)康恼莆展蚵鼧渚幋a原理二.實(shí)驗(yàn)內(nèi)容根據(jù)哈夫曼編碼的原理,編寫一個程序,在用戶輸入結(jié)點(diǎn)權(quán)值的基礎(chǔ)上求赫夫曼編碼,并能把給定的編碼進(jìn)行譯碼?;疽螅海?)初始化:從鍵盤輸入一字符串(或讀入一文件),統(tǒng)計(jì)出現(xiàn)的字符和每個字符出現(xiàn)的頻率,將字符出現(xiàn)的頻率作為結(jié)點(diǎn)的權(quán)值,建立哈夫曼樹。對各個字符進(jìn)行哈夫曼編碼,最后打印輸出字符及每個字符對應(yīng)的哈夫曼編碼。(2)編碼:利用已建好的哈夫曼樹對“輸入串”進(jìn)行哈夫曼編碼,最后打印輸入串對應(yīng)的哈

2、夫曼編碼(寫入文件)。(3)計(jì)算壓縮比(選作)(4)譯碼:利用已建好的哈夫曼樹對給定的一串代碼進(jìn)行譯碼,并打印輸出得到的字符串。(選作)測試數(shù)據(jù):對字符串{casbcatbsatbat}進(jìn)行編碼;對電文“1101000”譯碼。字符集D={?},出現(xiàn)頻率為w={?}三.程序源代碼#include#include#include///.............數(shù)據(jù)結(jié)構(gòu)的構(gòu)造..........typedefstructHTNode{intweight;intparent;intlchild;intrchil

3、d;HTNode(intw,intp,intl,intr){weight=w;parent=p;lchild=l;rchild=r;}}HTNode,*HuffmanTree;typedefchar**HuffmanCode;typedefstruct///譯碼參照表{charword;char*code;}LNode,*List;///.......選取最小和次小的......voidSelect(HuffmanTree&HT,intnum,int*s1,int*s2){inti;for(i=1;i<=num;i++){if(HT[i].parent==0)

4、{*s1=i;break;}}for(i=1;i<=num;i++){if(HT[i].parent==0){if(HT[*s1].weight>HT[i].weight)*s1=i;}}for(i=1;i<=num;i++){if(i==*s1)continue;if(HT[i].parent==0){*s2=i;break;}}for(i=1;i<=num;i++){if(HT[i].parent==0){if(i==*s1)continue;if(HT[*s2].weight>=HT[i].weight)*s2=i;}}}///..........哈夫曼

5、樹構(gòu)造函數(shù)..........voidHuffmanTreeCoding(HuffmanTree&HT,HuffmanCode&HC,int*w,intn){inti,c,m,start;intf,s1,s2;char*cd;HuffmanTreep;if(n<=1)return;m=2*n-1;HT=(HuffmanTree)malloc((m+1)*sizeof(HTNode));for(p=HT+1,i=1;i<=n;++i,++p,++w)*p=HTNode(*w,0,0,0);for(;i<=m;++i,++p)*p=HTNode(0,0,0,0);

6、for(i=n+1;i<=m;++i){Select(HT,i-1,&s1,&s2);////調(diào)用選取最小和次小的函數(shù)HT[s1].parent=i;HT[s2].parent=i;HT[i].lchild=s1;HT[i].rchild=s2;HT[i].weight=HT[s1].weight+HT[s2].weight;}HC=(HuffmanCode)malloc((n+1)*sizeof(char*));cd=(char*)malloc(n*sizeof(char));cd[n-1]='