


版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領
文檔簡介
1、數(shù)據(jù)結(jié)構(gòu)課設-哈夫曼二叉樹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é)點下標;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é)點下標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é)點的下標else if (huftreej.datavmin2&&huftreej.pare nt=-1)min2 = huftreej.data;min2 記下次小權(quán)值x2 = j;x2 記下次小權(quán)值結(jié)點的下標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()獲得當前哈夫曼樹的哈夫曼編碼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)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 山東省青島市十九中2020-2021學年高二上學期期中生物試題(解析版)
- 木竹采伐機械生產(chǎn)過程中的動態(tài)成本控制與風險評估研究-洞察闡釋
- 地調(diào)考試試題及答案
- 2024年度河北省護師類之外科護理主管護師綜合練習試卷A卷附答案
- BF公司股權(quán)激勵實施效果研究
- 餐飲業(yè)知識產(chǎn)權(quán)轉(zhuǎn)讓及經(jīng)營許可合同
- 跨境汽車銷售代理權(quán)轉(zhuǎn)讓及車輛出口合同
- 餐飲企業(yè)員工績效管理合同協(xié)議
- 車牌買賣及變更登記服務合同
- 柴油加注站運營與燃料供應合同
- 社區(qū)獲得性肺炎教學演示課件
- 西紅柿凍干技術(shù)應用
- 馬工程版《中國經(jīng)濟史》各章思考題答題要點及詳解
- 貴州省生態(tài)保護紅線分布圖
- 運行水泵能耗情況分析
- 《弘揚中華美德傳承良好家風》主題班會課件
- 云南省永德縣2016年煙草水源工程康家壩水庫至亞練連通工程環(huán)評報告
- 虛擬現(xiàn)實應用技術(shù)專業(yè)人才培養(yǎng)方案-rrl
- 物業(yè)管理員試題與參考答案
- 大學英語III(新視野大學英語讀寫教程2)學習通超星課后章節(jié)答案期末考試題庫2023年
- 人文素養(yǎng)知識考試復習題庫(含答案)
評論
0/150
提交評論