《數(shù)據(jù)結(jié)構(gòu)實(shí)訓(xùn)》實(shí)訓(xùn)報(bào)告

《數(shù)據(jù)結(jié)構(gòu)實(shí)訓(xùn)》實(shí)訓(xùn)報(bào)告

ID:10933515

大?。?08.00 KB

頁(yè)數(shù):39頁(yè)

時(shí)間:2018-07-09

《數(shù)據(jù)結(jié)構(gòu)實(shí)訓(xùn)》實(shí)訓(xùn)報(bào)告_第1頁(yè)
《數(shù)據(jù)結(jié)構(gòu)實(shí)訓(xùn)》實(shí)訓(xùn)報(bào)告_第2頁(yè)
《數(shù)據(jù)結(jié)構(gòu)實(shí)訓(xùn)》實(shí)訓(xùn)報(bào)告_第3頁(yè)
《數(shù)據(jù)結(jié)構(gòu)實(shí)訓(xùn)》實(shí)訓(xùn)報(bào)告_第4頁(yè)
《數(shù)據(jù)結(jié)構(gòu)實(shí)訓(xùn)》實(shí)訓(xùn)報(bào)告_第5頁(yè)
資源描述:

《《數(shù)據(jù)結(jié)構(gòu)實(shí)訓(xùn)》實(shí)訓(xùn)報(bào)告》由會(huì)員上傳分享,免費(fèi)在線閱讀,更多相關(guān)內(nèi)容在學(xué)術(shù)論文-天天文庫(kù)。

1、計(jì)算機(jī)工程系計(jì)算機(jī)12級(jí)卓越計(jì)Y121班數(shù)據(jù)結(jié)構(gòu)實(shí)訓(xùn)報(bào)告1題目與要求1.1問(wèn)題提出本人計(jì)劃編寫一個(gè)哈夫曼編碼譯碼器,主要是進(jìn)行信息通信,實(shí)現(xiàn)在發(fā)送端通過(guò)一個(gè)編碼系統(tǒng)對(duì)待傳數(shù)據(jù)預(yù)先編碼;在接收端將傳來(lái)的數(shù)據(jù)進(jìn)行譯碼(復(fù)原)的信息收發(fā)站。1.2本系統(tǒng)涉及的知識(shí)點(diǎn)最優(yōu)二叉樹、數(shù)組、循環(huán)、函數(shù)、分支、類型結(jié)構(gòu)定義、文件、遞歸1.3功能要求所要實(shí)現(xiàn)的題目功能:1)I:初始化(Initialization)。從終端讀入字符集大小n及n個(gè)字符和m個(gè)權(quán)值,建立哈夫曼樹,并將它存于文件hfmtree中。(2)C:編碼(Coding)。利用已建好的哈夫曼樹(如不在內(nèi)存,則

2、從文件hfmtree中讀入),對(duì)文件tobetrans中的正文進(jìn)行編碼,然后將結(jié)果存入文件codefile中。(3)D:解碼(Decoding)。利用已建好的哈夫曼樹將文件codefile中的代碼進(jìn)行譯碼,結(jié)果存入文件textfile中。(4)P:打印代碼文件(Print)。將文件codefile以緊湊格式顯示在終端上,每行50個(gè)代碼。同時(shí),將此字符形式的編碼文件寫入文件codeprint中。(5)T:打印哈夫曼樹(Treeprinting)。將已在內(nèi)存中的哈夫曼樹以直觀的方式(樹或凹人表形式)顯示在終端上,同時(shí)將此字符形式的哈夫曼樹寫入文件treep

3、rint中。2功能設(shè)計(jì)2.1算法設(shè)計(jì)本系統(tǒng)需要實(shí)現(xiàn)的功能要求:1、利用switch語(yǔ)句設(shè)計(jì)如圖1所示的主菜單(圖中的文字宋體5號(hào)):1、初始化(Init)39計(jì)算機(jī)工程系計(jì)算機(jī)12級(jí)卓越計(jì)Y121班數(shù)據(jù)結(jié)構(gòu)實(shí)訓(xùn)報(bào)告2、編碼(Coding)3、解碼(Decoding)4、打印代碼(print)5、打印哈夫曼樹(Treeprint)6、退出請(qǐng)輸入你的選擇(1~6):圖1哈夫曼編碼譯碼器主菜單2、(1)選擇2后,調(diào)用編碼子菜單函數(shù),進(jìn)入函數(shù)后利用switch語(yǔ)句實(shí)現(xiàn)一個(gè)如圖2所示的菜單,該菜單中1、2選項(xiàng)調(diào)用一個(gè)函數(shù)。圖2編碼(coding)子菜單(2)選擇

4、2后,調(diào)用解碼碼子菜單函數(shù),進(jìn)入函數(shù)后利用switch語(yǔ)句實(shí)現(xiàn)一個(gè)如圖3所示的菜單,該菜單中1、2選項(xiàng)調(diào)用一個(gè)函數(shù).圖3解碼(Decoding)子菜單39計(jì)算機(jī)工程系計(jì)算機(jī)12級(jí)卓越計(jì)Y121班數(shù)據(jù)結(jié)構(gòu)實(shí)訓(xùn)報(bào)告3、根據(jù)所選菜單編寫相應(yīng)代碼:1)初始化(Init):利用循環(huán)將字符存入結(jié)構(gòu)體數(shù)組,再利用循環(huán)從文本文件中取出字符統(tǒng)計(jì)字符的頻率存入結(jié)構(gòu)體數(shù)組中,再利用循環(huán)將其作為權(quán)值存入哈夫曼樹的結(jié)構(gòu)體數(shù)組中再循環(huán)尋找最小結(jié)點(diǎn)值建立哈夫曼樹,然后再將其創(chuàng)建哈夫曼樹存入文件中,最后對(duì)樹進(jìn)行逆向求葉子結(jié)點(diǎn)的編碼并將其編碼表存入文件和輸出在終端上。具體程序?yàn)椋簐oi

5、dInitialization(HuffmanTree&HT,HuffmanCode&HC,List*L)//初始化{Statistics(L,N);CreateHT_HC(HT,HC,L,N);printf("Initializationsucceed!!!!!");}///////////////////////////////統(tǒng)計(jì)文件中的字符(字符是從Ascll32--126)頻率,將其頻率作為權(quán)值建立哈夫曼樹/////////voidStatistics(List*L,intn){FILE*fp;inti,j;intm;char

6、ch;for(i=0,j=32;j<=126;j++){L[i].chars=j;i++;}if((fp=fopen("test.txt","r"))==NULL)//打開test.txt文件{printf("cannotopenthefile!!!");exit(0);}while((ch=fgetc(fp))!=EOF)//從文件中逐個(gè)取出字符直到文件結(jié)尾{m=ch-32;//m等于字符的Ascll碼值減去空格的Ascll碼,其值就為這個(gè)字符存放數(shù)組的下標(biāo)L[m].weight++;}39計(jì)算機(jī)工程系計(jì)算機(jī)12級(jí)卓越計(jì)Y121班數(shù)據(jù)結(jié)構(gòu)實(shí)訓(xùn)報(bào)告fc

7、lose(fp);}/////////////////////////////////////////////////求解最小權(quán)值的操作/////////////////intmin(HuffmanTreeHT,inti){intj,flag=0;unsignedintk=99999;//定義k足夠大for(j=1;j<=i;j++)//循環(huán)在1-i個(gè)結(jié)點(diǎn)中尋找權(quán)值最小的結(jié)點(diǎn)if(HT[j].weight

8、rent置為1,標(biāo)志這個(gè)結(jié)點(diǎn)已找過(guò)returnflag;}/////////////構(gòu)造哈夫曼

當(dāng)前文檔最多預(yù)覽五頁(yè),下載文檔查看全文

此文檔下載收益歸作者所有

當(dāng)前文檔最多預(yù)覽五頁(yè),下載文檔查看全文
溫馨提示:
1. 部分包含數(shù)學(xué)公式或PPT動(dòng)畫的文件,查看預(yù)覽時(shí)可能會(huì)顯示錯(cuò)亂或異常,文件下載后無(wú)此問(wèn)題,請(qǐng)放心下載。
2. 本文檔由用戶上傳,版權(quán)歸屬用戶,天天文庫(kù)負(fù)責(zé)整理代發(fā)布。如果您對(duì)本文檔版權(quán)有爭(zhēng)議請(qǐng)及時(shí)聯(lián)系客服。
3. 下載前請(qǐng)仔細(xì)閱讀文檔內(nèi)容,確認(rèn)文檔內(nèi)容符合您的需求后進(jìn)行下載,若出現(xiàn)內(nèi)容與標(biāo)題不符可向本站投訴處理。
4. 下載文檔時(shí)可能由于網(wǎng)絡(luò)波動(dòng)等原因無(wú)法下載或下載錯(cuò)誤,付費(fèi)完成后未能成功下載的用戶請(qǐng)聯(lián)系客服處理。