九九热最新网址,777奇米四色米奇影院在线播放,国产精品18久久久久久久久久,中文有码视频,亚洲一区在线免费观看,国产91精品在线,婷婷丁香六月天

歡迎來(lái)到裝配圖網(wǎng)! | 幫助中心 裝配圖網(wǎng)zhuangpeitu.com!
裝配圖網(wǎng)
ImageVerifierCode 換一換
首頁(yè) 裝配圖網(wǎng) > 資源分類(lèi) > DOC文檔下載  

哈夫曼樹(shù)數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)

  • 資源ID:31846906       資源大?。?span id="24d9guoke414" class="font-tahoma">341.02KB        全文頁(yè)數(shù):26頁(yè)
  • 資源格式: DOC        下載積分:15積分
快捷下載 游客一鍵下載
會(huì)員登錄下載
微信登錄下載
三方登錄下載: 微信開(kāi)放平臺(tái)登錄 支付寶登錄   QQ登錄   微博登錄  
二維碼
微信掃一掃登錄
下載資源需要15積分
郵箱/手機(jī):
溫馨提示:
用戶(hù)名和密碼都是您填寫(xiě)的郵箱或者手機(jī)號(hào),方便查詢(xún)和重復(fù)下載(系統(tǒng)自動(dòng)生成)
支付方式: 支付寶    微信支付   
驗(yàn)證碼:   換一換

 
賬號(hào):
密碼:
驗(yàn)證碼:   換一換
  忘記密碼?
    
友情提示
2、PDF文件下載后,可能會(huì)被瀏覽器默認(rèn)打開(kāi),此種情況可以點(diǎn)擊瀏覽器菜單,保存網(wǎng)頁(yè)到桌面,就可以正常下載了。
3、本站不支持迅雷下載,請(qǐng)使用電腦自帶的IE瀏覽器,或者360瀏覽器、谷歌瀏覽器下載即可。
4、本站資源下載后的文檔和圖紙-無(wú)水印,預(yù)覽文檔經(jīng)過(guò)壓縮,下載后原文更清晰。
5、試題試卷類(lèi)文檔,如果標(biāo)題沒(méi)有明確說(shuō)明有答案則都視為沒(méi)有答案,請(qǐng)知曉。

哈夫曼樹(shù)數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)

數(shù)據(jù)結(jié)構(gòu) 課程設(shè)計(jì)赫夫曼編碼/譯碼器設(shè)計(jì)指導(dǎo)教師:孫樹(shù)森、周維達(dá)班級(jí):09數(shù)媒(2)班學(xué)號(hào):E09700203姓名:林真超數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)實(shí)驗(yàn)報(bào)告一、題目:赫夫曼編碼/譯碼器設(shè)計(jì)二、目的:1、提高分析問(wèn)題、解決問(wèn)題的能力,進(jìn)一步鞏固數(shù)據(jù)結(jié)構(gòu)各種原理與方法。2、熟悉掌握一門(mén)計(jì)算機(jī)語(yǔ)言,可以進(jìn)行數(shù)據(jù)算法的設(shè)計(jì)。三、要求3.1總體要求 1、要充分認(rèn)識(shí)課程設(shè)計(jì)對(duì)培養(yǎng)自己的重要性,認(rèn)真做好設(shè)計(jì)前的各項(xiàng)準(zhǔn)備工作。尤其是對(duì)編程軟件的使用有基本的認(rèn)識(shí)。2、既要虛心接受老師的指導(dǎo),又要充分發(fā)揮主觀能動(dòng)性。結(jié)合課題,獨(dú)立思考,努力鉆研,勤于實(shí)踐,勇于創(chuàng)新。3、獨(dú)立按時(shí)完成規(guī)定的工作任務(wù),不得弄虛作假,不準(zhǔn)抄襲他人內(nèi)容,否則成績(jī)以不及格計(jì)。4、在設(shè)計(jì)過(guò)程中,要嚴(yán)格要求自己,樹(shù)立嚴(yán)肅、嚴(yán)密、嚴(yán)謹(jǐn)?shù)目茖W(xué)態(tài)度,必須按時(shí)、按質(zhì)、按量完成課程設(shè)計(jì)。3.2實(shí)施要求1、理解赫夫曼編碼/譯碼的確切意義。2、獨(dú)立進(jìn)行方案的制定,系統(tǒng)結(jié)構(gòu)設(shè)計(jì)要合理。3、在程序開(kāi)發(fā)時(shí),則必須清楚主要實(shí)現(xiàn)函數(shù)的目的和作用,需要在程序書(shū)寫(xiě)時(shí)說(shuō)明做適當(dāng)?shù)淖⑨?。在?xiě)課設(shè)報(bào)告時(shí),必須要將主要函數(shù)的功能和參數(shù)做詳細(xì)的說(shuō)明。4、通過(guò)多組數(shù)據(jù)來(lái)檢測(cè)該系統(tǒng)的穩(wěn)定性和正確性。3.3 課程設(shè)計(jì)報(bào)告的內(nèi)容及要求 在完成課題驗(yàn)收后,學(xué)生應(yīng)在規(guī)定的時(shí)間內(nèi)完成課程設(shè)計(jì)報(bào)告一份(不少于2000字)。1一、實(shí)驗(yàn)?zāi)康? 進(jìn)一步掌握最優(yōu)二叉樹(shù)的含義。2 掌握最優(yōu)二叉樹(shù)的結(jié)構(gòu)特征,以及各種存儲(chǔ)結(jié)構(gòu)的特點(diǎn)及使用范圍。3 熟練掌握哈夫曼樹(shù)的建立和哈夫曼編碼方法。4 掌握用指針類(lèi)型描述、訪問(wèn)和處理運(yùn)算。二、實(shí)驗(yàn)原理哈夫曼(Huffman)編碼屬于碼詞長(zhǎng)度可變的編碼類(lèi),是哈夫曼在1952年提出的一種編碼方法,即從下到上的編碼方法。同其他碼詞長(zhǎng)度可變的編碼一樣,可區(qū)別的不同碼詞的生成是基于不同符號(hào)出現(xiàn)的不同概率。生成哈夫曼編碼算法基于一種稱(chēng)為“編碼樹(shù)”(coding tree)的技術(shù)。算法步驟如下:(1)初始化,根據(jù)符號(hào)概率的大小按由大到小順序?qū)Ψ?hào)進(jìn)行排序。(2)把概率最小的兩個(gè)符號(hào)組成一個(gè)新符號(hào)(節(jié)點(diǎn)),即新符號(hào)的概率等于這兩個(gè)符號(hào)概率之和。(3)重復(fù)第2步,直到形成一個(gè)符號(hào)為止(樹(shù)),其概率最后等于1。(4)從編碼樹(shù)的根開(kāi)始回溯到原始的符號(hào),并將每一下分枝賦值為1,上分枝賦值為0。 譯碼的過(guò)程是分解電文中字符串,從根出發(fā),按字符“0”或“1”確定找做孩子或右孩子,直至葉子節(jié)點(diǎn),便求得該子串相應(yīng)的字符。三、實(shí)驗(yàn)內(nèi)容(一)需求分析一個(gè)完整的系統(tǒng)應(yīng)具有以下功能:(1) I:初始化。從終端讀入字符集大小n,以及n個(gè)字符和n個(gè)權(quán)值,建立哈夫曼樹(shù),并將它存于文件hfmTree中。(2) E:編碼。利用已建好的哈夫曼樹(shù),對(duì)文件ToBeTran中的正文進(jìn)行編碼,然后將結(jié)果存入文件CodeFile中。(3) D:譯碼。利用已建好的哈夫曼樹(shù)將文件CodeFile中的代碼進(jìn)行譯碼,結(jié)果存入文件Textfile中。(4) P:印代碼文件(Print).將文件CodeFile以緊湊格式顯示在終端上,每行50個(gè)代碼。同時(shí)將此字符形式的編碼文件寫(xiě)入文件CodePrin中。(5) T:印哈夫曼樹(shù)(Treeprinting).將已在內(nèi)存中的哈夫曼樹(shù)以直觀的方式(比如樹(shù))顯示在終端上,同時(shí)將此字符形式的哈夫曼樹(shù)寫(xiě)入文件TreePrint 中。(二)實(shí)驗(yàn)步驟1.定義結(jié)點(diǎn)結(jié)構(gòu),定義哈夫曼樹(shù)結(jié)構(gòu);2.初始化哈夫曼樹(shù),存儲(chǔ)哈夫曼樹(shù)信息;3.定義求哈夫曼編碼的函數(shù);4.定義譯哈夫曼編碼的函數(shù);5.寫(xiě)出主函數(shù)。6.測(cè)試系統(tǒng)。(三)概要設(shè)計(jì)1 設(shè)計(jì)思想赫夫曼樹(shù)用鄰接矩陣作為存儲(chǔ)結(jié)構(gòu),借助靜態(tài)鏈表來(lái)實(shí)現(xiàn)遍歷。2 函數(shù)間的關(guān)系函數(shù)間的關(guān)系如圖所示:主函數(shù)顯示表頭初始化樹(shù)輸入字符編碼譯碼打印編碼打印赫夫曼樹(shù)選最小兩個(gè)權(quán)值Select()圖3.1 函數(shù)間的關(guān)系3 數(shù)據(jù)結(jié)構(gòu)與算法設(shè)計(jì)赫夫曼編譯碼器的主要功能是先建立赫夫曼樹(shù),然后利用建好的赫夫曼樹(shù)生成赫夫曼編碼后進(jìn)行譯碼 。在數(shù)據(jù)通信中,經(jīng)常需要將傳送的文字轉(zhuǎn)換成由二進(jìn)制字符0、1組成的二進(jìn)制串,稱(chēng)之為編碼。構(gòu)造一棵赫夫曼樹(shù),規(guī)定赫夫曼樹(shù)中的左分之代表0,右分支代表1,則從根節(jié)點(diǎn)到每個(gè)葉子節(jié)點(diǎn)所經(jīng)過(guò)的路徑分支組成的0和1的序列便為該節(jié)點(diǎn)對(duì)應(yīng)字符的編碼,稱(chēng)之為赫夫曼編碼。最簡(jiǎn)單的二進(jìn)制編碼方式是等長(zhǎng)編碼。若采用不等長(zhǎng)編碼,讓出現(xiàn)頻率高的字符具有較短的編碼,讓出現(xiàn)頻率低的字符具有較長(zhǎng)的編碼,這樣可能縮短傳送電文的總長(zhǎng)度。赫夫曼樹(shù)課用于構(gòu)造使電文的編碼總長(zhǎng)最短的編碼方案。其主要流程圖如圖3.2所示。開(kāi)始結(jié)點(diǎn)數(shù)是否大于1將data和權(quán)值賦給ht輸出根結(jié)點(diǎn)和權(quán)值調(diào)用SELECT函數(shù)計(jì)算根結(jié)點(diǎn)函數(shù)父結(jié)點(diǎn)為兩子結(jié)點(diǎn)之和輸出兩子結(jié)點(diǎn)和已構(gòu)造的結(jié)點(diǎn)是否為根結(jié)點(diǎn)?左子是否為空?此時(shí)編碼為0I<2*N?I+編碼為1結(jié)束否否否右子是否為空是是否否是是是圖3.2 赫夫曼樹(shù)編譯碼器流程圖4.功能函數(shù)模塊劃分void main()void printhead()void printree(HuffmanTree HT,int w) /打印赫夫曼樹(shù)void coprint(HuffmanTree start,HuffmanTree HT)/打印代碼文件void printcode() /打印代碼void decode() /完成譯碼功能void encode() /完成編碼功能void inputcode() void init()void HuffmanCoding(HuffmanTree &HT,HuffmanCode &HC,int *w,int n)void select(HuffmanTree t,int i,int &s1,int &s2)int min(HuffmanTree t,int i)/找兩個(gè)最小的權(quán)值(四)詳細(xì)設(shè)計(jì)(1)哈夫曼編碼:首先定義函數(shù),找出全部權(quán)值中最小的兩個(gè),然后定義一個(gè)變量,使他始終成為最小的那個(gè)。再將兩個(gè)函數(shù)最為葉子結(jié)點(diǎn),并得到一個(gè)父親節(jié)點(diǎn),此父親節(jié)點(diǎn)的權(quán)值為其葉子節(jié)點(diǎn)的權(quán)值之和。并將此父親節(jié)點(diǎn)的權(quán)值與其余權(quán)值進(jìn)行比較,重新選出兩個(gè)最小的權(quán)值,再進(jìn)行上述步驟,直到所有權(quán)值形成了一顆二叉樹(shù),而此二叉樹(shù)就是我們所說(shuō)的最優(yōu)二叉樹(shù),即哈夫曼樹(shù)。以上為哈夫曼樹(shù)的建立過(guò)程,下面為哈夫曼編碼的過(guò)程,從葉子節(jié)點(diǎn)出發(fā),若此葉子節(jié)點(diǎn)為其父親節(jié)點(diǎn)的左孩子,則將其編碼為0,若為右孩子,則將其編碼為1,然后為其父親節(jié)點(diǎn)編碼,若為祖先的左孩子,則變?yōu)?,為右孩子則為1,依次向上一層進(jìn)行遍歷,直到遍歷到根節(jié)點(diǎn),停止編碼。(2)譯碼:對(duì)于已經(jīng)建好的哈夫曼樹(shù),要對(duì)其進(jìn)行譯碼,首先從根出發(fā)如果編碼為0,則往左孩子遍歷,如果編碼為1,則往右孩子遍歷,直到遍歷到葉子節(jié)點(diǎn),便求得該子串相應(yīng)的字符。(3)初始化哈夫曼鏈表:首先輸入結(jié)點(diǎn)個(gè)數(shù),再將字符及權(quán)值輸入,調(diào)用編碼函數(shù),得到每個(gè)字符編碼并將其輸出。最后將哈夫曼編碼寫(xiě)入文件。(4)完成編碼功能:打開(kāi)目錄下文件tobetran.txt,讀取里面的字符,對(duì)其進(jìn)行編碼后,將編碼寫(xiě)入目錄下的codefile.txt中。(5)完成譯碼功能:打開(kāi)根目錄下codefile.txt文件,讀取里面的編碼,對(duì)其中的編碼進(jìn)行譯碼,并將得到的內(nèi)容寫(xiě)入根目錄下的文件txtfile.txt中。(6)打印編碼(7)打印哈夫曼樹(shù)四、實(shí)驗(yàn)結(jié)果1程序運(yùn)行環(huán)境為DOS,執(zhí)行文件為:Huffman2.exe2 . 初始化哈夫曼鏈表(實(shí)驗(yàn)一)在這里,有一個(gè)要注意的問(wèn)題,在程序剛開(kāi)始運(yùn)行的時(shí)候,需要先用“i”命令對(duì)哈夫曼樹(shù)進(jìn)行初始化。若不進(jìn)行初始化,則表明哈夫曼樹(shù)并未建立,這樣就無(wú)法進(jìn)行后續(xù)的調(diào)試。3.編碼字符4.編碼5.譯碼6.打印編碼7.打印哈夫曼樹(shù)(實(shí)驗(yàn)二)1.初始化的內(nèi)容如表所示:字符ABCDEFGHIJKLM頻度1886413223210321154757153220字符NOPQRSTUVWXYZ頻度57631514851802381811612.初始化3.輸入的字符以及其對(duì)應(yīng)的編碼4、譯碼5. 文件textfile.txt中內(nèi)容: THIS1PROGRAM1IS1MY1FAVORIT(這里的空格字符定義為1,故出現(xiàn)此譯碼)6.打印編碼7.打印哈夫曼樹(shù)五、實(shí)驗(yàn)結(jié)果分析此算法的時(shí)間復(fù)雜度為:O(n),n為哈夫曼樹(shù)的結(jié)點(diǎn)個(gè)數(shù)。在對(duì)哈夫曼編碼/譯碼器算法設(shè)計(jì)過(guò)程中,主要參考了教材中對(duì)哈夫曼編碼/譯碼的算法。在實(shí)現(xiàn)的過(guò)程中遇到了一些問(wèn)題,后來(lái)參考網(wǎng)上的一些代碼,進(jìn)行與自己帶嗎的整合,將編碼/譯碼算法完成。而在對(duì)編碼以及字符進(jìn)行文件保存、打開(kāi)時(shí),也遇到了不小的問(wèn)題,很大一部分來(lái)源于對(duì)于以前C語(yǔ)言對(duì)文件操作的不熟練,所以在解決過(guò)程中,參考了一些類(lèi)似的成功算法實(shí)例。六、實(shí)驗(yàn)心得對(duì)于本次課程設(shè)計(jì),主要是需要掌握哈夫曼樹(shù)建立、哈夫曼編碼以及哈夫曼譯碼的算法。并能將其熟練應(yīng)用于編譯碼器的完成。經(jīng)過(guò)這次的課程設(shè)計(jì),使我們更加了解了數(shù)據(jù)結(jié)構(gòu),也更深入地了解了哈夫曼編碼與譯碼算法,課程設(shè)計(jì)的題目比我們平常的實(shí)驗(yàn)內(nèi)容要難,完成它不僅需要有厚實(shí)的語(yǔ)言基礎(chǔ),而且還要熟練掌握哈夫曼編碼與譯碼的算法,另外對(duì)于文件的基本操作也需要熟悉。由于本次課程設(shè)計(jì)時(shí)間安排得比較遲,所以大部分同學(xué)都在上課之前就把實(shí)驗(yàn)做好了,由于在課外做,碰到許多問(wèn)題無(wú)法請(qǐng)教老師,但是通過(guò)上網(wǎng)找尋解決辦法,大部分的錯(cuò)誤與問(wèn)題也都能基本解決。七、主要代碼#include <iostream.h>#include <iomanip.h>#include <string.h>#include <malloc.h>#include <stdio.h>const int UINT_MAX=1000;typedef struct /哈夫曼樹(shù)的存儲(chǔ)表示 int weight; /權(quán)值int parent,lchild,rchild; /父節(jié)點(diǎn),左孩子結(jié)點(diǎn),右孩子結(jié)點(diǎn)HTNode,* HuffmanTree; /動(dòng)態(tài)分配數(shù)組存儲(chǔ)哈夫曼樹(shù)typedef char *HuffmanCode;/動(dòng)態(tài)分配數(shù)組存儲(chǔ)哈夫曼編碼表/-全局變量-HuffmanTree HT; /代表赫夫曼樹(shù)HuffmanCode HC; /代表赫夫曼編碼int *w,i,j,n; char *z;int flag=0; int numb=0;/ -求赫夫曼編碼-void line()/畫(huà)分割線的函數(shù)cout<<"n-n"int min(HuffmanTree t,int i)/找兩個(gè)最小的權(quán)值 int j,flag;int k=UINT_MAX; / 取k為不小于可能的值for(j=1;j<=i;j+)if(tj.weight<k&&tj.parent=0)k=tj.weight,flag=j; tflag.parent=1; return flag; /返回標(biāo)識(shí)符/-使s1成為最小權(quán)值-void select(HuffmanTree t,int i,int &s1,int &s2) int j;s1=min(t,i);s2=min(t,i);if(s1>s2)/ s1為最小的兩個(gè)值中序號(hào)較小的那個(gè)j=s1;s1=s2;s2=j;void HuffmanCoding(HuffmanTree &HT,HuffmanCode &HC,int *w,int n)int m,i,s1,s2,start;int c,f;HuffmanTree p;char *cd;if(n<=1)return;m=2*n-1;/申請(qǐng)2n-1個(gè)內(nèi)存單元HT=(HuffmanTree)malloc(m+1)*sizeof(HTNode); / 0號(hào)單元未用for(p=HT+1,i=1;i<=n;+i,+p,+w)p->weight=*w;/賦權(quán)值p->parent=0;p->lchild=0;p->rchild=0;for(;i<=m;+i,+p)/初始化 p->parent=0; for(i=n+1;i<=m;+i) / 建赫夫曼樹(shù) select(HT,i-1,s1,s2);/調(diào)用建子樹(shù)的函數(shù)HTs1.parent=HTs2.parent=i;/i是s1和s2的父節(jié)點(diǎn)HTi.lchild=s1;HTi.rchild=s2;/s1和s2是i的兒子節(jié)點(diǎn)HTi.weight=HTs1.weight+HTs2.weight;/i的權(quán)值為s1和s2的和HC=(HuffmanCode)malloc(n+1)*sizeof(char*);/分配n個(gè)字符編碼的頭指針向量cd=(char*)malloc(n*sizeof(char); /分配求編碼的工作空間cdn-1=0; /編碼結(jié)束符for(i=1;i<=n;i+)/逐個(gè)字符求哈夫曼編碼start=n-1; /編碼結(jié)束符位置for(c=i,f=HTi.parent;f!=0;c=f,f=HTf.parent) / 從葉子到根逆向求編碼if(HTf.lchild=c)cd-start=0;elsecd-start=1;HCi=(char*)malloc(n-start)*sizeof(char);/為第i個(gè)字符編碼分配空間strcpy(HCi,&cdstart); /從cd復(fù)制編碼(串)到HCfree(cd);/釋放工作空間/-初始化哈夫曼鏈表-void init() flag=1;int num;int num2;cout<<"下面初始化赫夫曼鏈表"<<endl<<"請(qǐng)輸入結(jié)點(diǎn)的個(gè)數(shù)n:"cin>>num;/輸入結(jié)點(diǎn)個(gè)數(shù)n=num;w=(int*)malloc(n*sizeof(int);/權(quán)值z(mì)=(char*)malloc(n*sizeof(char);/字符cout<<"n請(qǐng)依次輸入"<<n<<"個(gè)字符(字符型)n注意:必須以回車(chē)結(jié)束:"<<endl;char temp2;for(i=0;i<n;i+)/輸入字符 cout<<"第"<<i+1<<"個(gè)字符:"<<endl; gets(temp); *(z+i)=*temp;line();for(i=0;i<=n-1;i+)/輸出字符cout<<setw(6)<<*(z+i);line();cout<<"n請(qǐng)依次輸入"<<n<<"個(gè)權(quán)值(n注意:必須以回車(chē)結(jié)束):"<<endl;for(i=0;i<=n-1;i+)/輸入權(quán)值cout<<endl<<"第"<<i+1<<"個(gè)字符的權(quán)值:"cin>>num2;*(w+i)=num2;HuffmanCoding(HT,HC,w,n);/調(diào)用哈夫曼編碼/-打印編碼-cout<<"字符對(duì)應(yīng)的編碼為:"<<endl;for(i=1;i<=n;i+)/輸出所有編碼puts(HCi);/-將赫夫曼編碼寫(xiě)入文件-cout<<"下面將赫夫曼編碼寫(xiě)入文件"<<endl;FILE *htmTree;char r= ,0; if(htmTree=fopen("htmTree.txt","w")=NULL)cout<<"文件打開(kāi)失敗"<<endl;return;fputs(z,htmTree);for(i=0;i<n+1;i+)fprintf(htmTree,"%6d",*(w+i);fputs(r,htmTree);for(i=1;i<=n;i+)fputs(HCi,htmTree);fputs(r,htmTree);fclose(htmTree);cout<<"已將字符與對(duì)應(yīng)編碼寫(xiě)入根目錄下文件htmTree.txt中"<<endl<<endl;/init/-獲取字符并寫(xiě)入文件-void inputcode() FILE *virttran,*tobetran;char str100;if(tobetran=fopen("tobetran.txt","w")=NULL)cout<<"不能打開(kāi)文件"<<endl;return;cout<<"請(qǐng)輸入你想要編碼的字符"<<endl;gets(str);fputs(str,tobetran);cout<<"獲取字符成功"<<endl;fclose(tobetran);/-void encode() /完成編碼功能cout<<"下面對(duì)目錄下文件tobetran.txt中的字符進(jìn)行編碼"<<endl;FILE *tobetran,*codefile;if(tobetran=fopen("tobetran.txt","rb")=NULL)cout<<"不能打開(kāi)文件"<<endl;if(codefile=fopen("codefile.txt","wb")=NULL)cout<<"不能打開(kāi)文件"<<endl;char *tran;i=99;tran=(char*)malloc(100*sizeof(char); /為tran分配100個(gè)字節(jié)while(i=99)if(fgets(tran,100,tobetran)=NULL)cout<<"不能打開(kāi)文件"<<endl;break;for(i=0;*(tran+i)!=0;i+)for(j=0;j<=n;j+)if(*(z+j-1)=*(tran+i)fputs(HCj,codefile);puts(HCj);if(j>n)cout<<"字符錯(cuò)誤,無(wú)法編碼!"<<endl;break;cout<<"編碼工作完成"<<endl<<"編碼寫(xiě)入目錄下的codefile.txt中"<<endl<<endl;fclose(tobetran);fclose(codefile);free(tran);/-void decode() /完成譯碼功能cout<<"下面對(duì)根目錄下文件codefile.txt中的字符進(jìn)行譯碼"<<endl;FILE *codef,*txtfile;if(txtfile=fopen("Textfile.txt","w")=NULL)cout<<"不能打開(kāi)文件"<<endl;if (codef=fopen("codefile.txt","r")=NULL)cout<<"不能打開(kāi)文件"<<endl;char *tbdc,*outext,i2;int io=0,i,m;unsigned long length=10000;tbdc=(char*)malloc(length*sizeof(char); /分配空間fgets(tbdc,length,codef);outext=(char*)malloc(length*sizeof(char); /分配空間m=2*n-1;for(i=0;*(tbdc+i)!=0;i+) /進(jìn)入循環(huán)i2=*(tbdc+i);if(HTm.lchild=0) *(outext+io)=*(z+m-1);io+;m=2*n-1;i-;else if(i2=0) m=HTm.lchild;else if(i2=1) m=HTm.rchild;*(outext+io)=0;fputs(outext,txtfile);cout<<"譯碼完成"<<endl<<"內(nèi)容寫(xiě)入根目錄下的文件txtfile.txt中"<<endl<<endl;free(tbdc);free(outext);fclose(txtfile);fclose(codef);/-void printcode() /打印代碼cout<<"下面打印根目錄下文件CodePrin.txt中編碼字符"<<endl<<"-n"FILE * CodePrin,* codefile;if(CodePrin=fopen("CodePrin.txt","w")=NULL)cout<<"不能打開(kāi)文件"<<endl;return;if(codefile=fopen("codefile.txt","r")=NULL)cout<<"不能打開(kāi)文件"<<endl;return;char *work3;work3=(char*)malloc(51*sizeof(char);doif(fgets(work3,51,codefile)=NULL)cout<<"不能讀取文件"<<endl;break;fputs(work3,CodePrin);puts(work3);while(strlen(work3)=50);free(work3);cout<<"打印工作結(jié)束"<<endl<<endl;fclose(CodePrin); fclose(codefile);void coprint(HuffmanTree start,HuffmanTree HT)/打印代碼文件char t= ;if(start!=HT)FILE * TreePrint;if(TreePrint=fopen("TreePrint.txt","a")=NULL)cout<<"創(chuàng)建文件失敗"<<endl;return; numb+;/該變量為已被聲明為全局變量coprint(HT+start->rchild,HT);if(start->lchild!=NULL&&start->rchild!=NULL) t=<cout<<setw(5*numb)<<start->weight<<t<<endl; fprintf(TreePrint,"%dn",start->weight);coprint(HT+start->lchild,HT);numb-;fclose(TreePrint);void printree(HuffmanTree HT,int w) /打印赫夫曼樹(shù)HuffmanTree p;p=HT+w;cout<<"下面打印赫夫曼樹(shù)"<<endl; / 輸出"打印赫夫曼樹(shù)"語(yǔ)句coprint(p,HT);cout<<"打印工作結(jié)束"<<endl; /輸出"打印工作結(jié)束"void printhead() cout<<"t數(shù)據(jù)結(jié)構(gòu)t課程設(shè)計(jì)t09數(shù)媒2班 林真超 E09700203n"cout<<"ntt" cout<<" i.初始化赫夫曼鏈表 w.編碼字符 ntt"cout<<" e.編 碼 d.譯 碼 ntt"cout<<" p.打印編碼 t.打印赫夫曼樹(shù) ntt"cout<<" q.退 出 ntt" if(flag=0)cout<<"n請(qǐng)先初始化赫夫曼鏈表,輸入in"cout<<"請(qǐng)選擇你要進(jìn)行的操作:"/*2主程序*/void main()char choice;while(choice!=q) printhead();cin>>choice; switch(choice) case i: /按下i則進(jìn)行初始化赫夫曼鏈表,調(diào)用init函數(shù) init(); break; case w: /按下w編碼字符,調(diào)用inputcode函數(shù)inputcode();break; case e: /按下e編碼,調(diào)用encode函數(shù)encode();break; case d: /按下d譯碼,調(diào)用decode函數(shù)decode();break; case p: /按下p打印編碼,調(diào)用printcode函數(shù)printcode();break; case t: /按下t打印赫夫曼樹(shù),調(diào)用printree函數(shù)printree(HT,2*n-1);break; case q: /按下q退出break; default:cout<<"輸入錯(cuò)誤,請(qǐng)重新選擇"<<endl; free(z); /釋放z結(jié)點(diǎn)free(w); /釋放w結(jié)點(diǎn)free(HT); /釋放HT結(jié)點(diǎn)成績(jī)?cè)u(píng)定表平時(shí)成績(jī)答辯成績(jī)最終成績(jī)24

注意事項(xiàng)

本文(哈夫曼樹(shù)數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì))為本站會(huì)員(仙***)主動(dòng)上傳,裝配圖網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)上載內(nèi)容本身不做任何修改或編輯。 若此文所含內(nèi)容侵犯了您的版權(quán)或隱私,請(qǐng)立即通知裝配圖網(wǎng)(點(diǎn)擊聯(lián)系客服),我們立即給予刪除!

溫馨提示:如果因?yàn)榫W(wǎng)速或其他原因下載失敗請(qǐng)重新下載,重復(fù)下載不扣分。




關(guān)于我們 - 網(wǎng)站聲明 - 網(wǎng)站地圖 - 資源地圖 - 友情鏈接 - 網(wǎng)站客服 - 聯(lián)系我們

copyright@ 2023-2025  zhuangpeitu.com 裝配圖網(wǎng)版權(quán)所有   聯(lián)系電話(huà):18123376007

備案號(hào):ICP2024067431號(hào)-1 川公網(wǎng)安備51140202000466號(hào)


本站為文檔C2C交易模式,即用戶(hù)上傳的文檔直接被用戶(hù)下載,本站只是中間服務(wù)平臺(tái),本站所有文檔下載所得的收益歸上傳人(含作者)所有。裝配圖網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)上載內(nèi)容本身不做任何修改或編輯。若文檔所含內(nèi)容侵犯了您的版權(quán)或隱私,請(qǐng)立即通知裝配圖網(wǎng),我們立即給予刪除!