




下載本文檔
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
1、實(shí)驗(yàn)報告實(shí)驗(yàn)名稱 Huffman編碼 專業(yè)班級 計(jì)科三班 姓名 學(xué)號 指導(dǎo)教師 日期 2014.12.20 一、實(shí)驗(yàn)?zāi)康?熟練掌握二叉樹應(yīng)用(Huffman編碼)的基本算法實(shí)現(xiàn)。二、實(shí)驗(yàn)內(nèi)容l 1對輸入的一串電文字符實(shí)現(xiàn)Huffman編碼,再對Huffman編碼生成的代碼串進(jìn)行譯碼,輸出電文字符串。實(shí)現(xiàn)功能如下: Huffman樹的建立 Huffman編碼的生成編碼文件的譯碼三、實(shí)驗(yàn)要求l 設(shè)計(jì)思路:數(shù)據(jù)結(jié)構(gòu):#define n 100/葉子結(jié)點(diǎn)數(shù)#define m 2*n-1/ Huffman樹中結(jié)點(diǎn)總數(shù)typedef struct int weight;/權(quán)值 int lchild , r
2、child , parent; /左右孩子及雙親指針HTNode; /樹中結(jié)點(diǎn)類型typedef HTNode HuffmanTreem+1;/0號單元不用主要實(shí)現(xiàn)函數(shù):n 統(tǒng)計(jì)字符串中字符的種類以及各類字符的個數(shù)的函數(shù)n 構(gòu)造Huffman樹的函數(shù)n Huffman編碼的函數(shù)n 建立正文的編碼文件的函數(shù)n 代碼文件的譯碼函數(shù)n 主函數(shù)四、實(shí)驗(yàn)概要設(shè)計(jì)1)功能框圖Huffman樹的建立從葉子到根逆向求編碼退出Huffman編碼程序Huffman編碼的生成編碼文件的譯碼五. 使用說明1.運(yùn)行環(huán)境:VC+ 6.0 2.首先選擇主控菜單中的操作,即建表,然后進(jìn)行其它操作六實(shí)驗(yàn)截圖七 實(shí)驗(yàn)體會1、構(gòu)建
3、哈夫曼樹的關(guān)鍵在于找最小樹;在F中選擇兩棵根結(jié)點(diǎn)權(quán)值最小的樹作為左右子樹構(gòu)造一棵新的二叉樹,且至新的二叉樹的根結(jié)點(diǎn)的權(quán)值為其左右子樹上根結(jié)點(diǎn)的權(quán)值之和。2、由于學(xué)習(xí)的不足沒有實(shí)現(xiàn)編碼文件的譯碼,今后會加以改進(jìn) ()3、在逆向求編碼的for循環(huán)里犯了一個邏輯錯誤導(dǎo)致求出來的3、4位編碼串行,嘗試了多鐘數(shù)據(jù)輸入才找到原因所在,并加以改正,編寫程序需一步一步的去調(diào)試并找到錯誤所在。附源程序:#include#include#include#includetypedef struct char data; /結(jié)點(diǎn)字符 int weight; /結(jié)點(diǎn)權(quán)值 int parent,lchild,rchild
4、; /父子結(jié)點(diǎn) HTNode,* HuffmanTree;typedef char * *HuffmanCode;void Select(HuffmanTree HT, int m, int& s1, int& s2) int i; s1 = s2 = 1; for(i=1; i=m; i+) if (HTi.parent=0) s1=i; break; for(i=i+1; iHTi.weight) s1=i; for(i=1; i=m; i+) if(HTi.parent=0&i!=s1) s2=i; break; for(i=i+1; i=m; i+) if(HTi.parent=0 &
5、 HTi.weightHTs2.weight & i!=s1) s2=i; void HuffmanCoding(HuffmanTree &HT,HuffmanCode &HC,int* w,int n) /w存放n個字符的權(quán)值,構(gòu)造赫夫曼樹HT,并求出n個字符的赫夫曼樹編碼HCint f; int m,i,s1,s2;int c;HuffmanTree p;char *cd;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).weight=*w
6、; (*p).parent=0; (*p).lchild=0; (*p).rchild=0;for( ;i=m;+i,+p) (*p).parent=0;for(i=n+1;i=m;+i) /建立赫夫曼樹 /在HT1.i-1選擇parent為0且weight最小的兩個節(jié)點(diǎn),其序號分別為s1,s2.Select(HT,i-1,s1,s2);HTs1.parent=i;HTs2.parent=i; HTi.lchild=s1;HTi.rchild=s2;HTi.weight=HTs1.weight+HTs2.weight;/*從葉子到根逆向求每個字符的赫夫曼編碼*HC=(HuffmanCode)m
7、alloc(n+1)*sizeof(char*);/分配n個字符編碼的頭指針向量cd=(char*)malloc(n*sizeof(char); /分配求編碼的工作區(qū)間cdn-1=0; /編碼結(jié)束符for(i=1;i=n;+i) /逐個字符求赫夫曼樹編碼 int start; start=n-1; /編碼結(jié)束符位置for(c=i,f=HTi.parent;f!=0;c=f,f=HTf.parent) /從葉子到根逆向求編碼if(HTf.lchild=c)cd-start=0;else cd-start=1;HCi=(char *)malloc(n-start)*sizeof(char); /為第i個字符編碼分配空間strcpy(HCi,&cdstart); /從cd復(fù)制編碼(串)到HCfree(cd); /釋放空間void main()HuffmanTree HT;HuffmanCode HC;int *w,n,i; printf(請輸入權(quán)值的個數(shù)(): );scanf (%d,&n);w=(int *)malloc(n*sizeof(int);print
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 房屋租賃合同委托書
- 借讀生協(xié)議書合同
- 《地球的氣候奧秘:課件概覽》
- 科學(xué)世界的奧秘解析
- 科學(xué)觀察:植物生長之旅
- 各種施工合同范本封面
- 合資共同購車合同范本
- 《水產(chǎn)養(yǎng)殖技術(shù)》課件
- 申報國家助學(xué)金申請書咋寫
- 合股承包設(shè)備合同范本
- 海洋自主無人系統(tǒng)跨域協(xié)同任務(wù)規(guī)劃模型與技術(shù)發(fā)展研究
- 中國中材海外科技發(fā)展有限公司招聘筆試沖刺題2025
- 兩層鋼結(jié)構(gòu)廠房施工方案
- 班級凝聚力主題班會12
- 初中語文“經(jīng)典誦讀與海量閱讀”校本課程實(shí)施方案
- 2025 春夏·淘寶天貓運(yùn)動戶外行業(yè)趨勢白皮書
- 西門子S7-1200 PLC應(yīng)用技術(shù)項(xiàng)目教程(第3版) 課件 1.認(rèn)識S7-1200PLC寬屏-(LAD+SCL)
- 《稅法》(第六版)全書教案電子講義
- 翻斗車司機(jī)安全培訓(xùn)
- 計(jì)算機(jī)軟件配置管理計(jì)劃規(guī)范
- 《勞動保障監(jiān)察條例》課件
評論
0/150
提交評論