


版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
1、數(shù)據(jù)結(jié)構(gòu)課設(shè)-哈夫曼二叉樹hufma ntree.h構(gòu)造哈夫曼樹并獲得哈夫曼編碼#in elude <fstream.h>#inelude <stdio.h>#in elude <stri ng.h>#in elude <proeess.h>template <elass T>struetTriNode二叉樹的三叉靜態(tài)鏈表結(jié)點Tdata;數(shù)據(jù)域intpare nt,left,righ t;父母結(jié)點和左、右孩子結(jié)點下標(biāo);classHuffma nTree哈夫曼樹類private:leafNum;int葉子結(jié)點個數(shù)TriNodev int
2、>*huftree;哈夫曼樹的結(jié)點數(shù)組char*hufcodes;哈夫曼編碼數(shù)組public:Huffma nTree(i ntweight, int n);構(gòu)造指定權(quán)值集合的哈夫曼樹Huffma nTree();int deep(i nt i);void prin t(char table,char stri ng);voidprin tk(i nti,char table);/凹入輸出private:void createHuffma nTree(i nt weight, i nt n);創(chuàng)建指定權(quán)值集合的哈夫曼樹voidgetHuffma nCode();獲得哈夫曼編碼;void
3、Huffma nTree:pri ntk(i nt i,char table) if(i>-1)prin tk(huftreei.left,table);for(i nt j=O;jv=deep(i);j+)cout«""cout<<huftreei.data;if(i<=leafNum-1)cout<<tablei;cout«e ndl;prin tk(huftreei.right,table);/凹入表示constMax_Weight=9999;默認最大權(quán)值HuffmanTree:HuffmanTree(intwe
4、ight, int n)構(gòu)造指定權(quán)值集合的哈夫曼樹n個葉子結(jié)點createHuffma nTree(weight, n); getHuffma nCode();voidHuffma nTree:createHuffma nTree(i ntweight, int n)創(chuàng)建指定權(quán)值集合的哈夫曼樹leafNum = n;huftree = new TriNode<i nt>2* n-1;/n個葉子結(jié)點的哈夫曼樹共有2n-1個結(jié)點int i;for(i=0;i<n;i+)結(jié)點數(shù)組初始化有n個葉子結(jié)點huftreei.data = weighti;huftreei.pare nt=
5、huftreei.left huftreei.right = -1;for(i=0;i<n-1;i+)構(gòu)造n-1個2度結(jié)點,每循環(huán)一次,構(gòu)造一個 2度結(jié)點int mini, min2, x1, x2;mi n1= mi n2 = Max_Weight;選擇最小和次最小權(quán)值,初值為最大權(quán)值x1=x2=-1;記錄兩個無父母的最小權(quán)值結(jié)點下標(biāo)for (int j=0; jvn+i;j+)查找兩個無父母的最小權(quán)值結(jié)點if(huftreej.data<mi n1&&huftreej.pare nt=-1)min2 = min1; x2 = x1;min1 = huftreej
6、.data;/mi n1記下最小權(quán)值x1=j;x1記下最小權(quán)值結(jié)點的下標(biāo)else if (huftreej.datavmin2&&huftreej.pare nt=-1)min2 = huftreej.data;min2 記下次小權(quán)值x2 = j;x2 記下次小權(quán)值結(jié)點的下標(biāo)huftreex1.pare nt=n+i;將找出的兩棵權(quán)值最小的子樹合并為一棵子樹huftreex2.pare nt= n+i;huftree n+i.data=huftreex1.data+huftreex2.data;huftree n+i.pare nt = -1;huftree n+i .left
7、 = x1;huftree n+i.right = x2;voidHuffma nTree:getHuffma nCode()獲得當(dāng)前哈夫曼樹的哈夫曼編碼int n=leafNum;hufcodes = newchar* n;求n個葉子結(jié)點的哈夫曼編碼for (int i=0; i<n; i+)char *code = newchar n;一個字符串表示一個編碼code n-1='0'int start=n-1;int child = i;int pare nt = huftreechild.pare nt;while(pare nt!=-1)/由葉結(jié)點向上直到根結(jié)點循環(huán)
8、start-;if (huftreepare nteft=child)codestart='0'左孩子結(jié)點編碼為0elsecodestart='1:右孩子結(jié)點編碼為1child = pare nt;pare nt = huftreechild.pare nt; hufcodesi=code+start;編碼數(shù)組各元素存儲由start開始的字符串voidHuffma nTree:pri nt(chartable,charstri ng)ofstream fou t;fout.ope n("code.dat",ios:out); cout«&q
9、uot;n 哈夫曼編碼:n"for (int i=0; i<leafNum; i+)cout<<tablei<<" : "<<hufcodesi<<endl;bool flag=false;cout«"哈夫曼編碼:"<<endl; for(i nt j=O;stri ngj!='O'j+)for(i=0;i<leafNum;i+)if(stri ngj=tablei) flag=true;elseflag=false;if(flag)fout<
10、;<hufcodesi; cout<<hufcodesi; fout.close();Huffma nTree:Huffma nTree() delete huftree;delete hufcodes; int Huffma nTree:deep(i nt i)in t j=0;int pare nt = huftreei.pare nt;while(pare nt!=-1)j+;parent = huftreepare nt.pare nt;return j;main .cpp#include <iostream.h>#include "Hufman
11、Tree.h" int main()int i,j,n=O;int k=O,a=O;int weight10;char string50;char table26;coutvv"輸入字符串:"vvendl;cin>>string;for(i=0;stringi!='0'i+)n+;for(i=0;i<n;i+)int m=0;bool flag=true;for(int p=0;p<k;p+) if(tablep=stringi) flag=false;if(flag)for(j=i;j<n;j+)if(stringi=stringj) m+;tablek=stringi;k+;coutvvkvv"號字符:"<vtablek-1vv" 有"<<m<<
溫馨提示
- 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)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年廣東省中考物理試題卷(含答案)
- 低溫倉儲空間利用率提升策略考核試卷
- 制刷企業(yè)團隊協(xié)作能力提升路徑分析考核試卷
- CADCAM技術(shù)在模具制造過程中的質(zhì)量控制考核試卷
- 樂器維修技術(shù)研討會報告匯編考核試卷
- 績效獎金分配的公平性與激勵效果研究考核試卷
- 護理臨床護理技術(shù)規(guī)范化操作護理服務(wù)質(zhì)量提升策略考核試卷
- 貨物損耗評估方法研究考核試卷
- 互聯(lián)網(wǎng)平臺創(chuàng)新生態(tài)系統(tǒng)中的政策工具與效果評估考核試卷
- 滅菌工藝質(zhì)量管理體系建立考核試卷
- DBJ33T 1271-2022 建筑施工高處作業(yè)吊籃安全技術(shù)規(guī)程
- 2025年江蘇鹽城市城投集團招聘筆試參考題庫含答案解析
- 2023-2024學(xué)年廣東省深圳市羅湖區(qū)七年級下學(xué)期期末英語試題及答案
- 全套老年人能力評估師考試題庫(50題+答案)
- 【MOOC】環(huán)境資源法學(xué)-西南政法大學(xué) 中國大學(xué)慕課MOOC答案
- 2022 消化內(nèi)科專業(yè) 藥物臨床試驗GCP管理制度操作規(guī)程設(shè)計規(guī)范應(yīng)急預(yù)案
- 三級安全教育試題(公司級、部門級、班組級)
- 整流器并聯(lián)運行控制策略
- 初級美發(fā)師題庫
- DZ∕T 0214-2020 礦產(chǎn)地質(zhì)勘查規(guī)范 銅、鉛、鋅、銀、鎳、鉬(正式版)
- 博奧工程量清單計價軟件操作指南
評論
0/150
提交評論