數(shù)據(jù)結(jié)構(gòu)哈夫曼報(bào)告_第1頁(yè)
數(shù)據(jù)結(jié)構(gòu)哈夫曼報(bào)告_第2頁(yè)
數(shù)據(jù)結(jié)構(gòu)哈夫曼報(bào)告_第3頁(yè)
數(shù)據(jù)結(jié)構(gòu)哈夫曼報(bào)告_第4頁(yè)
數(shù)據(jù)結(jié)構(gòu)哈夫曼報(bào)告_第5頁(yè)
已閱讀5頁(yè),還剩21頁(yè)未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、 數(shù) 據(jù) 結(jié) 構(gòu)課程設(shè)計(jì)說(shuō)明書題 目Huffman編碼和譯碼學(xué) 號(hào)1367111126姓 名楊科指導(dǎo)教師孫濤日 期2015.1.6內(nèi)蒙古科技大學(xué)課程設(shè)計(jì)任務(wù)書課程名稱數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)設(shè)計(jì)題目Huffman編碼和譯碼指導(dǎo)教師孫濤時(shí)間2014年秋學(xué)期第15周至第19周一、教學(xué)要求1. 掌握數(shù)據(jù)結(jié)構(gòu)與算法的設(shè)計(jì)方法,具備初步的獨(dú)立分析和設(shè)計(jì)能力2. 初步掌握軟件開發(fā)過(guò)程的問(wèn)題分析、系統(tǒng)設(shè)計(jì)、程序編碼、測(cè)試等基本方法和技能3. 提高綜合運(yùn)用所學(xué)的理論知識(shí)和方法獨(dú)立分析和解決問(wèn)題的能力4. 訓(xùn)練用系統(tǒng)的觀點(diǎn)和軟件開發(fā)一般規(guī)范進(jìn)行軟件開發(fā),培養(yǎng)軟件工作者所應(yīng)具備的科學(xué)的工作方法和作風(fēng)二、設(shè)計(jì)資料及參數(shù)每個(gè)

2、學(xué)生在教師提供的課程設(shè)計(jì)題目中任意選擇一題,獨(dú)立完成,題目選定后不可更換。Huffman編碼和譯碼根據(jù)給定的字符集和各字符的頻率值,求出其中給定字符Huffman編碼,并針對(duì)一段文本(定義在該字符集上)進(jìn)行編碼和譯碼,實(shí)現(xiàn)一個(gè)Huffman編碼/譯碼系統(tǒng)。要求設(shè)計(jì)類(或類模板)來(lái)描述Huffman樹及其操作,包含必要的構(gòu)造函數(shù)和析構(gòu)函數(shù),以及其他能夠完成如下功能的成員函數(shù):v 求Huffman編碼v 輸入字符串,求出編碼v 輸入一段編碼,實(shí)現(xiàn)譯碼 并設(shè)計(jì)主函數(shù)測(cè)試該類。三、設(shè)計(jì)要求及成果1. 分析課程設(shè)計(jì)題目的要求2. 寫出詳細(xì)設(shè)計(jì)說(shuō)明3. 編寫程序代碼,調(diào)試程序使其能正確運(yùn)行4. 設(shè)計(jì)完成的

3、軟件要便于操作和使用5. 設(shè)計(jì)完成后提交課程設(shè)計(jì)報(bào)告四、進(jìn)度安排資料查閱與討論(1天)系統(tǒng)分析(2天)系統(tǒng)的開發(fā)與測(cè)試(5天)編寫課程設(shè)計(jì)說(shuō)明書和驗(yàn)收(2天)五、評(píng)分標(biāo)準(zhǔn)1. 根據(jù)平時(shí)上機(jī)考勤、表現(xiàn)和進(jìn)度,教師將每天點(diǎn)名和檢查2. 根據(jù)課程設(shè)計(jì)完成情況,必須有可運(yùn)行的軟件。3. 根據(jù)課程設(shè)計(jì)報(bào)告的質(zhì)量,如有雷同,則所有雷同的所有人均判為不及格。4. 根據(jù)答辯的情況,應(yīng)能夠以清晰的思路和準(zhǔn)確、簡(jiǎn)練的語(yǔ)言敘述自己的設(shè)計(jì)和回答教師的提問(wèn)六、參考資料1數(shù)據(jù)結(jié)構(gòu) (C語(yǔ)言版)嚴(yán)蔚敏、吳偉民 主編 清華大學(xué)出版社 2004.112數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)案例精編(用C/C+描述),李建學(xué) 等 編著,清華大學(xué)出版社

4、 2007.23.數(shù)據(jù)結(jié)構(gòu):用面向?qū)ο蠓椒ㄅcC+語(yǔ)言描述,殷人昆 主編, 清華大學(xué)出版社 2007目 錄目 錄III第一章 需求分析41.1引言41.2任務(wù)概述41.3數(shù)據(jù)描述41.4功能需求51.5性能需求51.6運(yùn)行需求5第二章概要設(shè)計(jì)62.1總體設(shè)計(jì)6(一) 設(shè)計(jì)目的:6(二) 函數(shù)劃分72.2數(shù)據(jù)類型設(shè)計(jì)(或數(shù)據(jù)結(jié)構(gòu)設(shè)計(jì))72.3接口設(shè)計(jì)72.4運(yùn)行界面設(shè)計(jì)8第三章詳細(xì)設(shè)計(jì)93.1輸入、創(chuàng)建模塊設(shè)計(jì)93.2編碼模塊設(shè)計(jì)103.3譯碼模塊設(shè)計(jì)113.4主函數(shù)模塊設(shè)計(jì)13第四章測(cè)試分析154.1測(cè)試程序執(zhí)行情況154.2出現(xiàn)的問(wèn)題和解決的方法17第五章課程設(shè)計(jì)總結(jié)18附錄:程序代

5、碼19參考文獻(xiàn)2626 / 26文檔可自由編輯打印第一章 需求分析1.1 引言目前,進(jìn)行快速遠(yuǎn)距離通信的主要手段是電報(bào),即將需傳送的文字轉(zhuǎn)化成由二級(jí)制的字符組成的字符串。利用哈夫曼樹求得的用于通信的二進(jìn)制編碼稱為哈夫曼編碼。樹中從根到每個(gè)葉子都有一條路徑,對(duì)路徑上的各分支約定:指向左子樹的分支表示“0”碼,指向右子樹的分支表示“1”碼,取每條路徑上的“0”或“1”的序列作為和各個(gè)對(duì)應(yīng)的字符的編碼,這就是哈夫曼編碼。通常我們把數(shù)據(jù)壓縮的過(guò)程稱為編碼,解壓縮的過(guò)程稱為解碼。電報(bào)通信是傳遞文字的二進(jìn)制碼形式的字符串。但在信息傳遞時(shí),總希望總長(zhǎng)度盡可能最短,即采用最短碼。因此,哈夫曼樹在通信、編碼和數(shù)

6、據(jù)壓縮等技術(shù)領(lǐng)域有著廣泛的應(yīng)用。此設(shè)計(jì)說(shuō)明書是對(duì)編碼/譯碼系統(tǒng)開發(fā)的一個(gè)初步的分析說(shuō)明性文檔,旨在通過(guò)該文檔清晰的闡述系統(tǒng)的實(shí)際功能,方便系統(tǒng)開發(fā)人員對(duì)系統(tǒng)的理解以及與用戶的溝通。文檔相關(guān)說(shuō)明部分在目錄部分已全部涵蓋,閱讀此文檔的相關(guān)人員可以通過(guò)目錄索引找到相應(yīng)部分予以閱讀。1.2 任務(wù)概述Huffman編碼和譯碼根據(jù)給定的字符集和各字符的頻率值,求出其中給定字符Huffman編碼,并針對(duì)一段文本(定義在該字符集上)進(jìn)行編碼和譯碼,實(shí)現(xiàn)一個(gè)Huffman編碼/譯碼系統(tǒng)。1.3 數(shù)據(jù)描述該哈夫曼編碼/譯碼系統(tǒng)程序中的數(shù)據(jù)主要有:哈夫曼樹、哈夫曼編碼,哈夫曼譯碼等。1.4 功能需求(1). 輸入模

7、塊:輸入各個(gè)元素,建立哈夫曼樹;(2). 編碼模塊:將輸入的各個(gè)元素建立哈夫曼樹,進(jìn)行編碼;(3). 譯碼模塊:將電文以0或1輸入后,根據(jù)之前的哈夫曼樹進(jìn)行譯碼;(4). 輸出模塊:建立好的哈夫曼樹、編碼、譯碼進(jìn)行輸出。1.5 性能需求(1). 要求該編碼/譯碼系統(tǒng)具有一定的可擴(kuò)展性以便適應(yīng)發(fā)展,且便于維護(hù);(2). 要求該編碼/譯碼系統(tǒng)便于使用,使用步驟簡(jiǎn)易明了。1.6 運(yùn)行需求基于windows平臺(tái)下的窗口圖形界面軟件,運(yùn)行主界面為windows的經(jīng)典運(yùn)行界面,采用多文檔界面,從而使程序更加美觀,整齊有序,簡(jiǎn)易操作。軟件運(yùn)行基于windows平臺(tái)上的xp,Vista,win7等第二章 概要

8、設(shè)計(jì)2.1 總體設(shè)計(jì)(一) 設(shè)計(jì)目的:(1) 掌握數(shù)據(jù)結(jié)構(gòu)與算法的設(shè)計(jì)方法,具備初步的獨(dú)立分析和設(shè)計(jì)能力;(2) 初步掌握軟件開發(fā)過(guò)程的問(wèn)題分析、系統(tǒng)設(shè)計(jì)、程序編碼、測(cè)試等基本方法和技能;(3) 提高綜合運(yùn)用所學(xué)的理論知識(shí)和方法獨(dú)立分析和解決問(wèn)題的能力;(4) 訓(xùn)練用系統(tǒng)的觀點(diǎn)和軟件開發(fā)一般規(guī)范進(jìn)行軟件開發(fā),培養(yǎng)軟件工作者所應(yīng)具備的科學(xué)的工作方法和作風(fēng)。主菜單根據(jù)輸入電文進(jìn)行譯碼根據(jù)哈夫曼樹進(jìn)行編碼輸入元素建立哈夫曼樹圖2.1:程序主體設(shè)計(jì)圖(二) 函數(shù)劃分該程序有一個(gè)主函數(shù)和多個(gè)子函數(shù),主函數(shù)完成對(duì)子函數(shù)的調(diào)用,各子函數(shù)實(shí)現(xiàn)相應(yīng)的功能。(1) 結(jié)點(diǎn)的開辟。(2) 實(shí)現(xiàn)對(duì)輸入字符串中出現(xiàn)的不同

9、字符及其出現(xiàn)字?jǐn)?shù)的信息記錄。(3) 用葉子結(jié)點(diǎn)構(gòu)造赫夫曼樹。(4) 獲得構(gòu)造的赫夫曼樹中所有葉子結(jié)點(diǎn)的元素及其赫夫曼編碼。(5) 輸出各葉子結(jié)點(diǎn)元素及其對(duì)應(yīng)的赫夫曼編碼。(6) 輸出輸入的字符串的赫夫曼編碼。(7) 調(diào)用各子函數(shù)2.2 數(shù)據(jù)類型設(shè)計(jì)(或數(shù)據(jù)結(jié)構(gòu)設(shè)計(jì))表2.1:數(shù)據(jù)類型設(shè)計(jì)數(shù)據(jù)數(shù)據(jù)類型權(quán)值整數(shù)數(shù)據(jù)雙親整數(shù)數(shù)據(jù)左孩子整數(shù)數(shù)據(jù)右孩子整數(shù)數(shù)據(jù)struct結(jié)構(gòu)體類型2.3 接口設(shè)計(jì)表2.1:函數(shù)列表函數(shù)名函數(shù)格式 /即函數(shù)首部函數(shù)功能structtypedef樹結(jié)點(diǎn)的結(jié)構(gòu)定義樹結(jié)點(diǎn)的存儲(chǔ)定義HuffmanCreateint創(chuàng)建哈夫曼樹Encodingvoid對(duì)創(chuàng)建好的哈夫曼樹進(jìn)行編碼De

10、codingvoid根據(jù)創(chuàng)建好的哈夫曼樹進(jìn)行譯碼2.4 運(yùn)行界面設(shè)計(jì)圖2.1:運(yùn)行界面設(shè)計(jì)第三章 詳細(xì)設(shè)計(jì)3.1 輸入、創(chuàng)建模塊設(shè)計(jì)輸入、創(chuàng)建哈夫曼樹:int HuffmanCreate(HuffNode*ht)int i,k,n,m1,m2,p1,p2;printf("請(qǐng)輸入元素個(gè)數(shù)n");scanf("%d",&n);for(i=1;i<=n;i+) /輸入結(jié)點(diǎn)值和信息getchar();/接收回車printf("第%d個(gè)元素的:n結(jié)點(diǎn)值:",i);scanf("%c",&hti.data

11、);printf("權(quán)值:");scanf("%d",&hti.weight);for(i=1;i<=2*n-1;i+) /對(duì)數(shù)組初始化hti.parent=hti.left=hti.right=0;for(i=n+1;i<=2*n-1;i+)m1=m2=32767; /初始化,令m1,m2為整數(shù)最大值p1=p2=1;for(k=1;k<=i-1;k+) /從數(shù)組中找if(htk.parent=0) /parent為零切權(quán)值最小的兩個(gè)結(jié)點(diǎn)if(htk.weight<m1)m2=m1; /令m1為最小權(quán)值p2=p1; /p1

12、 為最小權(quán)值的位置m1=htk.weight; /m1存放最小權(quán)值p1=k;else if(htk.weight<m2)m2=htk.weight; /m2 為次小權(quán)值p2=k; /p2為次小權(quán)值所在位置htp1.parent=i; /i分別付給下標(biāo)為p1,p2的數(shù)組中htp2.parent=i;hti.weight=m1+m2; /新節(jié)點(diǎn)權(quán)值為最小權(quán)值和次小權(quán)值之和hti.left=p1; /p1為新節(jié)點(diǎn)的左孩子hti.right=p2; /p2為新節(jié)點(diǎn)的右孩子printf("哈夫曼樹已成功建立!n");return n; /返回結(jié)點(diǎn)數(shù)3.2 編碼模塊設(shè)計(jì)根據(jù)創(chuàng)建好

13、的哈夫曼樹,進(jìn)行編碼:void Encoding(HuffNode ht,HuffCode hcd,int n)HuffCode d;int i,k,f,c;for(i=1;i<=n;i+)/對(duì)所有節(jié)點(diǎn)循環(huán)d.start=n+1; /起始地點(diǎn)c=i; /從葉結(jié)點(diǎn)開始向上f=hti.parent;while(f!=0) /到樹根結(jié)束if(htf.left=c)d.cd-d.start='0' /規(guī)定左數(shù)代碼為零elsed.cd-d.start='1' /規(guī)定右樹代碼為一c=f;/c為孩子位置f=htf.parent; /f指雙親位置hcdi=d;printf

14、("輸出哈夫曼編碼:n");for(i=1;i<=n;i+)printf("%c:",hti.data); /先輸出結(jié)點(diǎn)for(k=hcdi.start;k<=n;k+) /在輸出對(duì)應(yīng)編碼printf("%c",hcdi.cdk);printf("n");3.3 譯碼模塊設(shè)計(jì)根據(jù)已有的哈夫曼樹和提供的電文,進(jìn)行譯碼:void Decoding(HuffNode ht,HuffCode hcd,int n)int f,m,k;DataType c,ch200; /c接收文件,ch存儲(chǔ)printf(&quo

15、t;請(qǐng)輸入電文(0 or 1),以#結(jié)束n");c=getchar();k=1;while(c!='#') /單字符循環(huán)輸入,以#結(jié)束chk=c; /單字符一次存入ch字串中c=getchar();k=k+1; /ch 下地址后移m=k; /標(biāo)記數(shù)組存儲(chǔ)末位位置f=2*n-1;k=1;/k 記錄電文字符個(gè)數(shù)printf("輸出哈夫曼譯碼:n");while(k<m) /k循環(huán)到數(shù)組末尾結(jié)束while(htf.left!=0) /直到左孩子結(jié)點(diǎn)為零結(jié)束if(chk='0') /若接收字符為0,則存為左孩子f=htf.left;i

16、f(chk='1') /若接收字符為1,則存為右孩子f=htf.right;k+; /ch數(shù)組下標(biāo)后移printf("%c",htf.data);f=2*n-1; /每次都從根節(jié)點(diǎn)開始查找printf("n");3.4 主函數(shù)模塊設(shè)計(jì)主函數(shù)的設(shè)計(jì):int main(int argc,char*argv)int n,select,flag=FALSE; /flag為零標(biāo)記第一次選擇功能HuffNode ht2*MAXNUM; /定義存放哈夫曼的數(shù)組HuffCode hcdMAXNUM; /定義存放編碼的數(shù)組while(TRUE)printf

17、("n歡迎進(jìn)入赫夫曼編碼譯碼nn");printf("1.建立哈夫曼樹 n");printf("2.編碼 n");printf("3.譯碼 n");printf("4.退出程序 nn");printf("請(qǐng)選擇您要實(shí)現(xiàn)的功能:(請(qǐng)輸入1-4)n");scanf("%d",&select);if(select>=1&&select<=4)if(select!=1&&select!=4&&fl

18、ag=0)printf("請(qǐng)先建立哈夫曼樹在選擇其他功能!n");continue;flag=TRUE;switch(select) case 1:n=HuffmanCreate(ht);break;case 2:Encoding(ht,hcd,n);break;case 3:Decoding(ht,hcd,n);break;case 4:exit(0);elseprintf("請(qǐng)重新輸入!n");return 0;第四章 測(cè)試分析4.1 測(cè)試程序執(zhí)行情況圖4.1:選擇建立哈夫曼樹圖4.2:輸入需建立哈夫曼樹的元素個(gè)數(shù)圖4.3:成功建立哈夫曼樹圖4.4:

19、根據(jù)建立好的哈夫曼樹,進(jìn)行編碼圖4.5:根據(jù)建立好的哈夫曼樹以及輸入的電文,進(jìn)行譯碼4.2 出現(xiàn)的問(wèn)題和解決的方法1. 程序的語(yǔ)句結(jié)束后,忘記打分號(hào):程序運(yùn)行出現(xiàn)錯(cuò)誤后,加上分號(hào);2. 輸入電文時(shí),誤將0和1輸成其他數(shù)據(jù),結(jié)果程序出現(xiàn)將其他數(shù)據(jù)隨機(jī)當(dāng)做0或1。第五章 課程設(shè)計(jì)總結(jié)在課程設(shè)計(jì)過(guò)程中,我們每個(gè)人選擇一個(gè)課題,認(rèn)真研究,根據(jù)課堂教授內(nèi)容,借助書本,自己動(dòng)手實(shí)踐。這樣不但有助于我們消化課堂所講解的內(nèi)容,還可以增強(qiáng)我們的獨(dú)立思考能力和動(dòng)手能力;通過(guò)編寫實(shí)驗(yàn)代碼和調(diào)試運(yùn)行,我們可以逐步積累調(diào)試C程序的經(jīng)驗(yàn)并逐漸培養(yǎng)我們的編程能力、用計(jì)算機(jī)解決實(shí)際問(wèn)題的能力。在課程設(shè)計(jì)過(guò)程中,我們不但有自己

20、的獨(dú)立思考,還借助各種參考文獻(xiàn)來(lái)幫助我們完成系統(tǒng)。更為重要的是,我們同學(xué)之間加強(qiáng)了交流,在對(duì)問(wèn)題的認(rèn)識(shí)方面可以交換不同的意見(jiàn)。在寫代碼前,首先,對(duì)問(wèn)題進(jìn)行了分析,明確了目標(biāo),列出了大的框架,然后逐漸細(xì)化,劃分出不同的功能模塊,由具體的子函數(shù)去實(shí)現(xiàn),先在紙上編寫代碼,寫好后進(jìn)行了反復(fù)的邏輯推理,發(fā)現(xiàn)并解決邏輯問(wèn)題,然后,上機(jī)調(diào)試,方法是:一個(gè)一個(gè)功能模塊分開進(jìn)行調(diào)試,主要看調(diào)試的模塊能否達(dá)到預(yù)期的結(jié)果,這樣可以縮小排錯(cuò)的范圍,便以糾錯(cuò)和提高編程的效率,當(dāng)每個(gè)功能模塊都調(diào)試好后,就把各個(gè)部分組合起來(lái),再進(jìn)行調(diào)試,主要檢查各函數(shù)接口是否正確,當(dāng)達(dá)到預(yù)期的結(jié)果,調(diào)試結(jié)束,編程部分完成,然后按實(shí)驗(yàn)要求完

21、成實(shí)驗(yàn)報(bào)告。數(shù)據(jù)結(jié)構(gòu)課程具有比較強(qiáng)的理論性,同時(shí)也具有較強(qiáng)的可應(yīng)用性和實(shí)踐性。課程設(shè)計(jì)是一個(gè)重要的教學(xué)環(huán)節(jié)。我們?cè)谝话闱闆r下都能夠重視實(shí)驗(yàn)環(huán)節(jié),但是容易忽略實(shí)驗(yàn)的總結(jié),忽略實(shí)驗(yàn)報(bào)告的撰寫。通過(guò)這次實(shí)驗(yàn)讓我們明白:作為一名大學(xué)生必須嚴(yán)格訓(xùn)練分析總結(jié)能力、書面表達(dá)能力。需要逐步培養(yǎng)書寫科學(xué)實(shí)驗(yàn)報(bào)告以及科技論文的能力。只有這樣,我們的綜合素質(zhì)才會(huì)有好的提高。附錄:程序代碼#include<stdio.h>#include<malloc.h>#include<limits.h>#include<string.h>#include<stdlib.h&

22、gt;#include<io.h>#include<math.h>#include<process.h>#define TRUE 1#define FALSE 0#define OK 1#define ERROR -1#define INFEASIBLE -1typedef char DataType;#define MAXNUM 50typedef struct /huffman 樹結(jié)點(diǎn)的結(jié)構(gòu)定義DataType data; /數(shù)據(jù)用字符表示int weight; /權(quán)值int parent; /雙親int left; /左孩子int right; /右孩

23、子HuffNode;typedef struct/huffman 樹結(jié)點(diǎn)的存儲(chǔ)定義DataType cdMAXNUM; /存放編碼位串int start; /編碼起始位置HuffCode;int HuffmanCreate(HuffNode*ht)int i,k,n,m1,m2,p1,p2;printf("請(qǐng)輸入元素個(gè)數(shù)n");scanf("%d",&n);for(i=1;i<=n;i+) /輸入結(jié)點(diǎn)值和信息getchar(); /接收回車printf("第%d個(gè)元素的:n結(jié)點(diǎn)值:",i);scanf("%c&

24、quot;,&hti.data);printf("權(quán)值:");scanf("%d",&hti.weight);for(i=1;i<=2*n-1;i+) /對(duì)數(shù)組初始化hti.parent=hti.left=hti.right=0;for(i=n+1;i<=2*n-1;i+)m1=m2=32767; /初始化,令m1,m2為整數(shù)最大值p1=p2=1;for(k=1;k<=i-1;k+) /從數(shù)組中找if(htk.parent=0) /parent為零切權(quán)值最小的兩個(gè)結(jié)點(diǎn)if(htk.weight<m1)m2=m1;

25、/令m1為最小權(quán)值p2=p1; /p1 為最小權(quán)值的位置m1=htk.weight; /m1存放最小權(quán)值p1=k;else if(htk.weight<m2)m2=htk.weight; /m2 為次小權(quán)值p2=k; /p2為次小權(quán)值所在位置htp1.parent=i; /i分別付給下標(biāo)為p1,p2的數(shù)組中htp2.parent=i;hti.weight=m1+m2; /新節(jié)點(diǎn)權(quán)值為最小權(quán)值和次小權(quán)值之和hti.left=p1;/p1為新節(jié)點(diǎn)的左孩子hti.right=p2;/p2為新節(jié)點(diǎn)的右孩子printf("哈夫曼樹已成功建立!n");return n; /返回結(jié)

26、點(diǎn)數(shù)/編碼void Encoding(HuffNode ht,HuffCode hcd,int n)HuffCode d;int i,k,f,c;for(i=1;i<=n;i+) /對(duì)所有節(jié)點(diǎn)循環(huán)d.start=n+1; /起始地點(diǎn)c=i; /從葉結(jié)點(diǎn)開始向上f=hti.parent;while(f!=0) /到樹根結(jié)束if(htf.left=c)d.cd-d.start='0' /規(guī)定左數(shù)代碼為零elsed.cd-d.start='1' /規(guī)定右樹代碼為一c=f; /c為孩子位置f=htf.parent; /f指雙親位置hcdi=d;printf(&qu

27、ot;輸出哈夫曼編碼:n");for(i=1;i<=n;i+)printf("%c:",hti.data); /先輸出結(jié)點(diǎn)for(k=hcdi.start;k<=n;k+) /在輸出對(duì)應(yīng)編碼printf("%c",hcdi.cdk);printf("n");/譯碼void Decoding(HuffNode ht,HuffCode hcd,int n)int f,m,k;DataType c,ch200; /c接收文件,ch存儲(chǔ)printf("請(qǐng)輸入電文(0 or 1),以#結(jié)束n");c=getchar();k=1;while(c!='#') /單字符循環(huán)輸入,以#結(jié)束chk=c; /單字符一次存入ch字串中c=getchar();k=k+1; /ch下地址后移m=k; /標(biāo)記數(shù)組存儲(chǔ)末位位置f=2*n-1;k=1; /k記錄電文字符個(gè)數(shù)printf("輸出哈夫曼譯碼:n");while(k<m) /k循環(huán)到數(shù)組末尾結(jié)束while(htf.left!=0) /直到左孩子結(jié)點(diǎn)為零結(jié)束if(chk='0') /若接收字符為0,則存為左孩子f=htf.lef

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論