下載本文檔
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、#include #include stdlib.h #define MAXBIT 10#define MAXVALUE 10000#define MAXLEAF 100#define MAXNODE MAXLEAF*2-1 /定義哈夫曼樹編碼類型typedef struct char bitMAXBIT; /存放葉子結(jié)點(diǎn)字符編碼過后的二進(jìn)制編碼 int start; /存放葉子結(jié)點(diǎn)二進(jìn)制編碼在bit數(shù)組里的起始數(shù)組位置int length; /存放二進(jìn)制編碼的位數(shù)HFMCode; /定義哈夫曼樹結(jié)點(diǎn)類型typedef struct char data; /編碼字符int weight; /哈
2、夫曼樹結(jié)點(diǎn)的權(quán)值int parent; /哈夫曼樹結(jié)點(diǎn)的父結(jié)點(diǎn)int lchild; /哈夫曼樹結(jié)點(diǎn)的左孩子int rchild; /哈夫曼樹結(jié)點(diǎn)的右孩子HFMNode; /構(gòu)造哈夫曼樹void createHFMTree(HFMNode hfmnodeMAXNODE,int n) int i,j,m1,m2,x1,x2; for(i=0;i2*n-1;i+) hfmnodei.weight=0; hfmnodei.parent=-1; hfmnodei.lchild=-1; hfmnodei.rchild=-1; for(i=0;in;i+) getchar();printf(請(qǐng)輸入第%d片
3、葉子的字符:,i+1); scanf(%c,&hfmnodei.data);printf(請(qǐng)輸入第%d片葉子的權(quán)重:,i+1); scanf(%d,&hfmnodei.weight); for(i=0;in-1;i+) m1=m2=MAXVALUE; /m1和m2分別用來存儲(chǔ)葉子結(jié)點(diǎn)權(quán)值的最小值和次小值x1=x2=0; /x1和x2分別用來存儲(chǔ)m1和m2的位置for(j=0;jn+i;j+) if(hfmnodej.weightm1&hfmnodej.parent=-1) m2=m1;x2=x1;m1=hfmnodej.weight;x1=j; else if(hfmnodej.weightm
4、2&hfmnodej.parent=-1) m2=hfmnodej.weight;x2=j; hfmnodex1.parent=n+i; hfmnodex2.parent=n+i; hfmnoden+i.weight=hfmnodex1.weight+hfmnodex2.weight;/父結(jié)點(diǎn)的權(quán)重是左孩子和右孩子的權(quán)重之和 hfmnoden+i.lchild=x1; hfmnoden+i.rchild=x2; /顯示葉子的編碼字符和編碼字符對(duì)應(yīng)的二進(jìn)制編碼void showCode(HFMCode hfmcodeMAXNODE,HFMNode hfmnodeMAXNODE,int n)int
5、 i,j,k,c,p; HFMCode cd;for(i=0;in;i+) hfmcodei.length=0;hfmcodei.start=0;k=hfmcodei.start;cd.start=n-1;c=i; p=hfmnodec.parent; while(p!=-1) if(hfmnodep.lchild=c) cd.bitcd.start=0; else cd.bitcd.start=1; cd.start-; c=p; p=hfmnodec.parent; for(j=cd.start+1;jn;j+) hfmcodei.bitk=cd.bitj; k+;hfmcodei.len
6、gth+; /length計(jì)算存放的二進(jìn)制編碼的位數(shù) for(i=0;in;i+) /輸出每個(gè)葉子節(jié)點(diǎn)的哈夫曼編碼 printf(第%d片葉子的編碼是:,i+1); printf(%ct,hfmnodei.data);for(j=hfmcodei.start;jhfmcodei.length;j+)printf(%d,hfmcodei.bitj); printf(n); /輸入字符串,得到二進(jìn)制編碼void compileCode(char str,int n,HFMCode hfmcodeMAXLEAF,HFMNode hfmnodeMAXNODE)int i,j,k;for(i=0;str
7、i!=0;i+)for(j=0;jn;j+)if(stri=hfmnodej.data)for(k=hfmcodej.start;khfmcodej.length;k+)printf(%d,hfmcodej.bitk);printf(nn);/輸入二進(jìn)制編碼得到字符串void decompileCode(char num,int n,HFMCode hfmcodeMAXLEAF,HFMNode hfmnodeMAXNODE)int i,j;j=2*n-2; /哈夫曼樹根結(jié)點(diǎn)的位置for(i=0;numi!=0;i+)if(numi=0)j=hfmnodej.lchild;else if(num
8、i=1)j=hfmnodej.rchild;if(jn) /j大于等于n表示的都是除葉子結(jié)點(diǎn)以外的哈夫曼樹結(jié)點(diǎn) printf(%c,hfmnodej.data);j=2*n-2;printf(n);/主函數(shù)void main() HFMNode hfmnodeMAXNODE; HFMCode hfmcodeMAXLEAF; char str100; /存放輸入的需要編譯的的字符串char num100; /存放輸入的需要編譯的二進(jìn)制字符串int n; /輸入的葉子結(jié)點(diǎn)數(shù)/哈夫曼編碼器printf(-哈弗曼編碼器-n);printf(請(qǐng)輸入葉子結(jié)點(diǎn)數(shù):); scanf(%d,&n);createHFMTree(hfmnode,n);showCode(hfmcode,hfmnode,n);/哈夫曼譯碼器printf(-哈夫曼譯碼器-n);printf(
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝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ù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2026年羅平縣婦幼保健院招聘編外人員8人備考題庫(kù)及參考答案詳解1套
- 2026年樟木中心衛(wèi)生院公開招聘編外工作人員5人的備考題庫(kù)完整答案詳解
- 公共交通線路規(guī)劃管理制度
- 2026年西北工業(yè)大學(xué)集成電路學(xué)院(微電子學(xué)院)非事業(yè)編制人員招聘?jìng)淇碱}庫(kù)及參考答案詳解1套
- 2026年河南省胸科醫(yī)院、鄭州市中醫(yī)院招聘97人備考題庫(kù)及一套完整答案詳解
- 中學(xué)學(xué)生社團(tuán)活動(dòng)經(jīng)費(fèi)使用規(guī)范制度
- 中學(xué)宿舍管理規(guī)則制度
- 養(yǎng)老院特殊護(hù)理制度
- 養(yǎng)老院老人心理咨詢師培訓(xùn)制度
- 企業(yè)員工培訓(xùn)與素質(zhì)培養(yǎng)制度
- T-CECS120-2021套接緊定式鋼導(dǎo)管施工及驗(yàn)收規(guī)程
- 放射科醫(yī)院感染管理:加強(qiáng)院感控制
- 《公路橋涵養(yǎng)護(hù)規(guī)范》(JTG5120-2021)
- 華為在歐洲市場(chǎng)分析報(bào)告
- 商業(yè)廣場(chǎng)物管費(fèi)測(cè)算表
- 申論范文寶典
- 【一例擴(kuò)張型心肌病合并心力衰竭患者的個(gè)案護(hù)理】5400字【論文】
- 四川橋梁工程系梁專項(xiàng)施工方案
- 貴州省納雍縣水東鄉(xiāng)水東鉬鎳礦采礦權(quán)評(píng)估報(bào)告
- GB.T19418-2003鋼的弧焊接頭 缺陷質(zhì)量分級(jí)指南
- GB/T 1690-2010硫化橡膠或熱塑性橡膠耐液體試驗(yàn)方法
評(píng)論
0/150
提交評(píng)論