![數(shù)據(jù)結(jié)構(gòu)試驗(yàn)三哈夫曼樹(shù)試驗(yàn)報(bào)告_第1頁(yè)](http://file3.renrendoc.com/fileroot_temp3/2022-1/27/ea5e2875-2a31-45db-a3f5-77d118e67601/ea5e2875-2a31-45db-a3f5-77d118e676011.gif)
![數(shù)據(jù)結(jié)構(gòu)試驗(yàn)三哈夫曼樹(shù)試驗(yàn)報(bào)告_第2頁(yè)](http://file3.renrendoc.com/fileroot_temp3/2022-1/27/ea5e2875-2a31-45db-a3f5-77d118e67601/ea5e2875-2a31-45db-a3f5-77d118e676012.gif)
![數(shù)據(jù)結(jié)構(gòu)試驗(yàn)三哈夫曼樹(shù)試驗(yàn)報(bào)告_第3頁(yè)](http://file3.renrendoc.com/fileroot_temp3/2022-1/27/ea5e2875-2a31-45db-a3f5-77d118e67601/ea5e2875-2a31-45db-a3f5-77d118e676013.gif)
![數(shù)據(jù)結(jié)構(gòu)試驗(yàn)三哈夫曼樹(shù)試驗(yàn)報(bào)告_第4頁(yè)](http://file3.renrendoc.com/fileroot_temp3/2022-1/27/ea5e2875-2a31-45db-a3f5-77d118e67601/ea5e2875-2a31-45db-a3f5-77d118e676014.gif)
![數(shù)據(jù)結(jié)構(gòu)試驗(yàn)三哈夫曼樹(shù)試驗(yàn)報(bào)告_第5頁(yè)](http://file3.renrendoc.com/fileroot_temp3/2022-1/27/ea5e2875-2a31-45db-a3f5-77d118e67601/ea5e2875-2a31-45db-a3f5-77d118e676015.gif)
版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、題目:哈夫曼編/譯碼器一、 題目要求:寫(xiě)一個(gè)哈夫曼碼的編/譯碼系統(tǒng),要求能對(duì)要傳輸?shù)膱?bào)文進(jìn)行編碼和解碼。構(gòu)造哈夫曼樹(shù)時(shí),子樹(shù),權(quán)值大的放右子樹(shù),編碼時(shí)右子樹(shù)編碼為1,左子樹(shù)編碼為 0.二、 概要設(shè)計(jì): 數(shù)據(jù)結(jié)構(gòu):typedef structint bitMAXBIT; int start; HCodeType;typedef structint weight;int pare nt;int lchild;int rchild;char value; HNode;/*結(jié)點(diǎn)結(jié)構(gòu)體 */函數(shù):void DEMONHuffma nTree (HNode HuffNodeMAXNODE, i nt n)
2、作用:構(gòu)造一個(gè)哈夫曼樹(shù),并循環(huán)構(gòu)建int main ()作用:運(yùn)用已經(jīng)構(gòu)建好的哈弗曼樹(shù),進(jìn)行節(jié)點(diǎn)的處理,達(dá)到成功解碼編譯三、詳細(xì)設(shè)計(jì):哈夫曼樹(shù)的建立:void DEMONHuffma nTree (HNode HuffNodeMAXNODE, i nt n)int i = 0, j, m1, m2, x1, x2;char x;/*初始化存放哈夫曼樹(shù)數(shù)組HuffNode中的結(jié)點(diǎn)*/while (in)HuffNodei.weight = 0;are nt =-1;HuffNodei.lchild =-1;HuffNodei.rchild =-1;權(quán)值小的放左/*編碼結(jié)構(gòu)體 */scanf(%c
3、,&x); scanf(%c,&HuffNodei.value); eight);for (i=n; i2*n-1; i+)HuffNodei.weight = 0;arent =-1;HuffNodei.lchild =-1;HuffNodei.rchild =-1;HuffNodei.value=i;/* 循環(huán)構(gòu)造 Huffman 樹(shù) */for (i=0; in-1; i+)m1=m2=MAXQZ;eight m1 & HuffNodej.parent=-1)m2=m1;eight; x1=j;else if (HuffNodej.weight m2 &
4、HuffNodej.parent=-1)m2=HuffNodej.weight; x2=j; /* end for */* 設(shè)置找到的兩個(gè)子結(jié)點(diǎn) x1、 x2 的父結(jié)點(diǎn)信息 */ HuffNodex1.parent = n+i;HuffNodex2.parent = n+i;HuffNoden+i.weight = HuffNodex1.weight + HuffNodex2.weight; HuffNoden+i.lchild= x1;HuffNoden+i.rchild = x2;葉子節(jié)點(diǎn)的哈夫曼編碼的保存:for (j=+1; jn; j+)HuffCodei.bitj = j;Huff
5、Codei.start = ;主函數(shù)展示:int main()HNode HuffNodeMAXNODE;HCodeType HuffCodeMAXLEAF,cd;int i, j, c, p, n,k=0;char wen100;char z; scanf (%d, &n);HuffmanTree (HuffNode, n);for (i=0; i n; i+)= n-1;c = i;p = HuffNodec.parent;while (p != -1) /* 父結(jié)點(diǎn)存在 */if (HuffNodep.lchild = c) = 0; else = 1; /* 求編碼的低一位 *
6、/ c=p;p=HuffNodec.parent; /* 設(shè)置下一循環(huán)條件 */ /* end while */for (j=+1; jn; j+)HuffCodei.bitj = j;HuffCodei.start = ; /* end for */z=getchar();z=getchar(); for(;z!=n;z=getchar()wenk+=z; for(i=0;in;i+)if(z=HuffNodei.value)for (j=HuffCodei.start+1; j n; j+) printf (%d, HuffCodei.bitj);break; else;prin tf(n
7、);for(i=0;ik;i+) prin tf(%c,we n i);prin tf(n);return 0;四、 調(diào)試分析與心得體會(huì):雖然哈夫曼樹(shù)的建立有書(shū)上的參考,但是實(shí)際寫(xiě)整個(gè)代碼的時(shí)候還是問(wèn)題重重。首先就是哈弗曼樹(shù)忘記了初始的賦值,導(dǎo)致最后出現(xiàn)了問(wèn)題。這樣的錯(cuò)誤還是很容易解決,但是之后就出現(xiàn)了WA 的情況。在同學(xué)的幫助下,最后發(fā)現(xiàn)是因?yàn)樵谶x取節(jié)點(diǎn)的時(shí)候,循環(huán)出現(xiàn)了問(wèn)題,雖然看起來(lái)編譯沒(méi)有錯(cuò),但是邊緣情況就會(huì)出現(xiàn)數(shù)據(jù)錯(cuò)誤,這個(gè)還是很令人警醒,而這種思考的不全面的問(wèn)題,在debug 的過(guò)程中會(huì)耗去大量的時(shí)間,這是要注意的。五、 用戶操作說(shuō)明:輸入表示字符集大小為 n n(n n = 10
8、0100)的正整數(shù),以及 n n 個(gè)字符和 n n 個(gè)權(quán)值(正整數(shù),值越大 表示該字符出現(xiàn)的概率越大);輸入串長(zhǎng)小于或等于 100100 的目標(biāo)報(bào)文。六、運(yùn)行結(jié)果:附帶自己的算法完成的結(jié)果圖,可以通過(guò)Prt Sc 和圖片編輯器獲得;-VHp=ll。 曰PONknHU2EOU111600000LVcxl*zl山1XIAI0000LNox-u!pp4t山QONXIAIu!pp4t丄山1XIAIu!pp4tH-mxs u!pp4tHuffNodei.rchild =-1;scanf(%c,&x);scanf(%c,&HuffNodei.value); eight); i+;for (
9、i=n; i2*n-1; i+)HuffNodei.weight = 0;arent =-1;HuffNodei.lchild =-1;HuffNodei.rchild =-1;HuffNodei.value=i;/* 循環(huán)構(gòu)造 Huffman 樹(shù) */for (i=0; in-1; i+)m1=m2=MAXQZ; eight m1 & HuffNodej.parent=-1)m2=m1;eight; x1=j;else if (HuffNodej.weight m2 & HuffNodej.parent=-1)m2=HuffNodej.weight; x2=j; /* end
10、 for */* 設(shè)置找到的兩個(gè)子結(jié)點(diǎn) x1、 x2 的父結(jié)點(diǎn)信息 */ HuffNodex1.parent =n+i; HuffNodex2.parent = n+i;HuffNoden+i.weight = HuffNodex1.weight + HuffNodex2.weight;HuffNoden+i.lchild = x1;HuffNoden+i.rchild = x2;int main()HNode HuffNodeMAXNODE;/* 定義一個(gè)結(jié)點(diǎn)結(jié)構(gòu)體數(shù)組 */HCodeType HuffCodeMAXLEAF,cd;/* 定義一個(gè)編碼結(jié)構(gòu)體數(shù)組,同時(shí)定義一個(gè)臨時(shí)變量來(lái)存放求解
11、編碼時(shí)的信息 */ int i, j, c, p, n,k=0; char wen100; char z; scanf(%d, &n); HuffmanTree (HuffNode, n);for (i=0; i n; i+)= n-1;c = i;p = HuffNodec.parent;while (p != -1) /* 父結(jié)點(diǎn)存在 */if (HuffNodep.lchild = c) = 0;else = 1; /* 求編碼的低一位 */ c=p;p=HuffNodec.parent; /* 設(shè)置下一循環(huán)條件 */ /* end while */* 保存求出的每個(gè)葉結(jié)點(diǎn)的哈夫
12、曼編碼和編碼的起始位 */ for (j=+1;jn; j+)HuffCodei.bitj = j;HuffCodei.start = ; /* end for */z=getchar();z=getchar(); for(;z!=n;z=getchar()wenk+=z; for(i=0;in;i+)if(z=HuffNodei.value)for (j=HuffCodei.start+1; j n; j+) printf(%d, HuffCodei.bitj);break;else;printf(n);i = 0;while (ik)printf(n);return 0;printf(%c,weni);i+;6060上機(jī)實(shí)習(xí)要求:1 1、 認(rèn)真準(zhǔn)備,按時(shí)參加上機(jī)實(shí)習(xí),不得無(wú)故缺席,抽查不到者扣分;2 2、獨(dú)立完成老師布置的題目,上機(jī)完成程序并調(diào)試正確,課后完成實(shí)驗(yàn)報(bào)告的編寫(xiě),將上 機(jī)程序和實(shí)驗(yàn)報(bào)告打包后交給輔導(dǎo)老師評(píng)定分?jǐn)?shù),實(shí)驗(yàn)報(bào)告要求和評(píng)分標(biāo)準(zhǔn)見(jiàn)后面;3 3、 提倡創(chuàng)新,可對(duì)課本上提供的算法進(jìn)行改進(jìn);4 4、 上機(jī)程序必須在程序中提供足夠的注釋,詳細(xì)為好。5 5、實(shí)驗(yàn)報(bào)告不用寫(xiě)出算法,只要寫(xiě)出對(duì)課程設(shè)計(jì)的見(jiàn)解,如對(duì)某一算法的改進(jìn)思想,算法 設(shè)計(jì)思想,調(diào)試算法過(guò)程中出現(xiàn)的問(wèn)題及改進(jìn)方法,調(diào)試程序的體會(huì)等。只要是自己編程 和調(diào)試就會(huì)寫(xiě)出相應(yīng)的報(bào)告。考核標(biāo)準(zhǔn)1 1、 機(jī)試程序和
溫馨提示
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 蘇科版數(shù)學(xué)七年級(jí)上冊(cè)4.2《一元二次方程的解法》(第6課時(shí))聽(tīng)評(píng)課記錄
- 冀教版數(shù)學(xué)八年級(jí)上冊(cè)《SAS》聽(tīng)評(píng)課記錄5
- 湘教版數(shù)學(xué)七年級(jí)下冊(cè)3.2.2《角的度量》聽(tīng)評(píng)課記錄
- (湘教版)七年級(jí)數(shù)學(xué)下冊(cè):2.1.4《多項(xiàng)式的乘法》聽(tīng)評(píng)課記錄
- 七年級(jí)道德與法治上冊(cè)第三單元 師長(zhǎng)情誼第六課師生之間第2框師生交往聽(tīng)課評(píng)課記錄(新人教版)
- 人教版七年級(jí)數(shù)學(xué)上冊(cè):4.1.2《點(diǎn)、線、面、體》聽(tīng)評(píng)課記錄1
- 湘教版數(shù)學(xué)七年級(jí)上冊(cè)1.4.1《有理數(shù)的加法》聽(tīng)評(píng)課記錄
- 部編版八年級(jí)道德與法治上冊(cè)聽(tīng)課評(píng)課記錄《9.1認(rèn)識(shí)總體國(guó)家安全觀》
- 暑假小學(xué)一年級(jí)學(xué)習(xí)計(jì)劃
- 三年級(jí)下學(xué)期班主任工作計(jì)劃
- 2025中國(guó)移動(dòng)安徽分公司春季社會(huì)招聘高頻重點(diǎn)提升(共500題)附帶答案詳解
- 七年級(jí)英語(yǔ)下學(xué)期開(kāi)學(xué)考試(深圳專用)-2022-2023學(xué)年七年級(jí)英語(yǔ)下冊(cè)單元重難點(diǎn)易錯(cuò)題精練(牛津深圳版)
- 杭州市房地產(chǎn)經(jīng)紀(jì)服務(wù)合同
- 放射科護(hù)理常規(guī)
- 新時(shí)代中小學(xué)教師職業(yè)行為十項(xiàng)準(zhǔn)則
- 人教版八年級(jí)上冊(cè)英語(yǔ)1-4單元測(cè)試卷(含答案)
- 2024年大宗貿(mào)易合作共贏協(xié)議書(shū)模板
- 初中數(shù)學(xué)教學(xué)經(jīng)驗(yàn)分享
- 新聞?dòng)浾咦C600道考試題-附標(biāo)準(zhǔn)答案
- 2024年公開(kāi)招聘人員報(bào)名資格審查表
- TSG ZF001-2006《安全閥安全技術(shù)監(jiān)察規(guī)程》
評(píng)論
0/150
提交評(píng)論