資源描述:
《哈弗曼編譯碼器 (羅忠霖)》由會(huì)員上傳分享,免費(fèi)在線閱讀,更多相關(guān)內(nèi)容在行業(yè)資料-天天文庫。
1、2010級(jí)計(jì)算機(jī)科學(xué)與技術(shù)專業(yè)集美大學(xué)計(jì)算機(jī)工程學(xué)院2011~2012學(xué)年第一學(xué)期《數(shù)據(jù)結(jié)構(gòu)》實(shí)驗(yàn)報(bào)告題目:實(shí)驗(yàn)五哈夫曼編/譯碼器學(xué)號(hào):2010810072成績班級(jí):計(jì)算1013日期:2011.11.15姓名:羅忠霖指導(dǎo)老師:楊艷華一、實(shí)驗(yàn)?zāi)康模罕敬蔚膶?shí)驗(yàn)?zāi)康脑谟谑棺x者深入了解樹的特性,以便在實(shí)際問題背景下靈活運(yùn)用他們;同時(shí)還將鞏固掌握對(duì)樹結(jié)構(gòu)的構(gòu)造方法的理解,并且回顧文件操作的使用。二、實(shí)驗(yàn)環(huán)境:本次試驗(yàn)在VC++環(huán)境下調(diào)試。三、實(shí)驗(yàn)內(nèi)容與完成情況:1.問題描述利用哈夫曼編碼進(jìn)行通信可以大大提高信道利用率,縮短信息傳輸?shù)臅r(shí)間,降低傳輸成本。但是這
2、要求在發(fā)送端通過一個(gè)編碼系統(tǒng)對(duì)待傳數(shù)據(jù)預(yù)先編碼,在接收端將傳來的數(shù)據(jù)進(jìn)行譯碼。對(duì)于雙工信道,每端都需要一個(gè)完整的編/譯碼系統(tǒng)。試為這樣的信息收發(fā)站寫一個(gè)哈夫曼碼的編/譯碼系統(tǒng)。2.基本要求一個(gè)完整的系統(tǒng)應(yīng)具有以下功能:(1)初始化,構(gòu)造哈弗曼樹。(2)編碼。(3)譯碼。(4)印代碼文件。(5)印哈弗曼樹。3.程序代碼#include#include#include#includetypedefstruct{charchr1;intweight;intparent,lchil
3、d,rchild;}HTNode,*HuffmanTree;typedefstruct{charchr;intw1;char*code;//編碼}Ch;//字符和對(duì)應(yīng)的權(quán)值及編碼voidSelect(HuffmanTree&HT1,intj,int&s1,int&s2);voidHuffmanCoding(HuffmanTree&HT,Ch*w,intn);//構(gòu)造哈夫曼樹HT102010級(jí)計(jì)算機(jī)科學(xué)與技術(shù)專業(yè)集美大學(xué)計(jì)算機(jī)工程學(xué)院2011~2012學(xué)年第一學(xué)期voidencoding(HuffmanTree&HT,Ch*ch,intn);//求每
4、個(gè)字符的哈夫曼編碼voidEncoding(Ch*ch1,intn);//編碼voidDecoding(HuffmanTree&HT,intsum);//譯碼voidcaidan();voidPrintf();voidmain(){FILE*p;intchoice,n1,w2=1;inti,flag=1,m;charch;HuffmanTreeHTr;Ch*c;caidan();while(flag){loop:printf("*請(qǐng)選擇(0-5):");scanf("%d",&choice);switch(choice){case1:print
5、f("請(qǐng)輸入字符集大小n=");scanf("%d",&n1);c=(Ch*)malloc((n1+1)*sizeof(Ch));flushall();for(i=1;i<=n1;i++){printf("請(qǐng)輸入字符及其權(quán)值:");scanf("%c%d",&ch,&w2);c[i].chr=ch;c[i].w1=w2;flushall();}HuffmanCoding(HTr,c,n1);encoding(HTr,c,n1);break;case2:Encoding(c,n1);break;case3:Decoding(HTr,n1);break
6、;case4:Printf();break;case5:m=2*n1-1;if((p=fopen("TreePrint.txt","w"))==NULL)printf("Filecouldnotbeopened");else{fprintf(p,"哈夫曼樹的構(gòu)造如下所示:");fprintf(p,"結(jié)點(diǎn)weightparentlchildrchild");for(i=1;i<=m;i++){fprintf(p,"%4d%8d%8d%8d%8d",i,HTr[i].weight,102010級(jí)計(jì)算機(jī)科學(xué)與技術(shù)專業(yè)集美大學(xué)計(jì)算機(jī)工程學(xué)院
7、2011~2012學(xué)年第一學(xué)期HTr[i].parent,HTr[i].lchild,HTr[i].rchild);}}fclose(p);printf("哈夫曼樹的構(gòu)造如下所示:");printf("結(jié)點(diǎn)weightparentlchildrchild");for(i=1;i<=m;i++){printf("%4d%8d%8d%8d%8d",i,HTr[i].weight,HTr[i].parent,HTr[i].lchild,HTr[i].rchild);}break;case0:flag=0;printf("你選擇了推出程序,歡迎
8、使用!");break;default:gotoloop;}}}voidcaidan(){printf("****