數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)哈夫曼編碼2_第1頁(yè)
數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)哈夫曼編碼2_第2頁(yè)
數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)哈夫曼編碼2_第3頁(yè)
數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)哈夫曼編碼2_第4頁(yè)
免費(fèi)預(yù)覽已結(jié)束,剩余11頁(yè)可下載查看

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、數(shù)據(jù)結(jié)構(gòu)與算法課程設(shè)計(jì)目錄一、前言1摘要2數(shù)據(jù)結(jié)構(gòu)與算法課程設(shè)計(jì)任務(wù)書(shū)二、實(shí)驗(yàn)?zāi)康娜?、題目 - 赫夫曼編碼 / 譯碼器1問(wèn)題描述2基本要求3測(cè)試要求4實(shí)現(xiàn)提示四、需求分析 - 具體要求五、概要設(shè)計(jì)六、程序說(shuō)明七、詳細(xì)設(shè)計(jì)八、實(shí)驗(yàn)心得與體會(huì)前言1 摘要隨著計(jì)算機(jī)的普遍應(yīng)用與日益發(fā)展,其應(yīng)用早已不局限于簡(jiǎn)單的數(shù)值運(yùn)算,而涉及到問(wèn)題的分析、數(shù)據(jù)結(jié)構(gòu)框架的設(shè)計(jì)以及設(shè)計(jì)最短路線(xiàn)等復(fù)雜的非數(shù)值處理和操作。算法與數(shù)據(jù)結(jié)構(gòu)的學(xué)習(xí)就是為以后利用計(jì)算機(jī)資源高效地開(kāi)發(fā)非數(shù)值處理的計(jì)算機(jī)程序打下堅(jiān)實(shí)的理論、方法和技術(shù)基礎(chǔ)。算法與數(shù)據(jù)結(jié)構(gòu)旨在分析研究計(jì)算機(jī)加工的數(shù)據(jù)對(duì)象的特性,以便選擇適當(dāng)?shù)臄?shù)據(jù)結(jié)構(gòu)和存儲(chǔ)結(jié)構(gòu),從而使建

2、立在其上的解決問(wèn)題的算法達(dá)到最優(yōu)。數(shù)據(jù)結(jié)構(gòu)是在整個(gè)計(jì)算機(jī)科學(xué)與技術(shù)領(lǐng)域上廣泛被使用的術(shù)語(yǔ)。它用來(lái)反映一個(gè)數(shù)據(jù)的部構(gòu)成,即一個(gè)數(shù)據(jù)由那些成分?jǐn)?shù)據(jù)構(gòu)成,以什么方式構(gòu)成,呈什么結(jié)構(gòu)。 數(shù)據(jù)結(jié)構(gòu)有邏輯上的數(shù)據(jù)結(jié)構(gòu)和物理上的數(shù)據(jù)結(jié)構(gòu)之分。邏輯上的數(shù)據(jù)結(jié)構(gòu)反映成分?jǐn)?shù)據(jù)之間的邏輯關(guān)系,而物理上的數(shù)據(jù)結(jié)構(gòu)反映成分?jǐn)?shù)據(jù)在計(jì)算機(jī)部的存儲(chǔ)安排。數(shù)據(jù)結(jié)構(gòu)是數(shù)據(jù)存在的形式。數(shù)據(jù)結(jié)構(gòu) 主要介紹一些最常用的數(shù)據(jù)結(jié)構(gòu),闡明各種數(shù)據(jù)結(jié)構(gòu)在的邏輯關(guān)系,討論其在計(jì)算機(jī)中的存儲(chǔ)表示, 以及在其上進(jìn)行各種運(yùn)算時(shí)的實(shí)現(xiàn)算法,并對(duì)算法的效率進(jìn)行簡(jiǎn)單的分析和討論。數(shù)據(jù)結(jié)構(gòu)是介于數(shù)學(xué)、計(jì)算機(jī)軟件和計(jì)算機(jī)硬件之間的一門(mén)計(jì)算機(jī)專(zhuān)業(yè)的核心課程,它是

3、計(jì)算機(jī)程序設(shè)計(jì)、數(shù)據(jù)庫(kù)、操作系統(tǒng)、編譯原理及人工智能等的重要基礎(chǔ),廣泛的應(yīng)用于信息學(xué)、系統(tǒng)工程等各種領(lǐng)域。學(xué)習(xí)數(shù)據(jù)結(jié)構(gòu)是為了將實(shí)際問(wèn)題中所涉及的對(duì)象在計(jì)算機(jī)中表示出來(lái)并對(duì)它們進(jìn)行處理。通過(guò)課程設(shè)計(jì)可以提高學(xué)生的思維能力,促進(jìn)學(xué)生的綜合應(yīng)用能力和專(zhuān)業(yè)素質(zhì)的提高。2數(shù)據(jù)結(jié)構(gòu)與算法課程設(shè)計(jì)任務(wù)書(shū)數(shù)據(jù)結(jié)構(gòu)與算法 是計(jì)算機(jī)專(zhuān)業(yè)重要的核心課程之一, 在計(jì)算機(jī)專(zhuān)業(yè)的學(xué)習(xí)過(guò)程中占有非常重要的地位。數(shù)據(jù)結(jié)構(gòu)與算法課程設(shè)計(jì) 就是要運(yùn)用本課程以及到目前為止的有關(guān)課程中的知識(shí)和技術(shù)來(lái)解決實(shí)際問(wèn)題。 特別是面臨非數(shù)值計(jì)算類(lèi)型的應(yīng)用問(wèn)題時(shí),需要選擇適當(dāng)?shù)臄?shù)據(jù)結(jié)構(gòu),設(shè)計(jì)出滿(mǎn)足一定時(shí)間和空間限制的有效算法。本課程設(shè)計(jì)要求同學(xué)

4、獨(dú)立完成一個(gè)較為完整的應(yīng)用需求分析。并在設(shè)計(jì)和編寫(xiě)具有一定規(guī)模程序的過(guò)程中,深化對(duì)數(shù)據(jù)結(jié)構(gòu)與算法課程中基本概念、理論和方法的理解;訓(xùn)練綜合運(yùn)用所學(xué)知識(shí)處理實(shí)際問(wèn)題的能力,強(qiáng)化面向?qū)ο蟮某绦蛟O(shè)計(jì)理念;使自己的程序設(shè)計(jì)與調(diào)試水平有一個(gè)明顯的提高。二、實(shí)驗(yàn)?zāi)康臄?shù)據(jù)結(jié)構(gòu)作為一門(mén)學(xué)科主要研究數(shù)據(jù)的各種邏輯結(jié)構(gòu)和存儲(chǔ)結(jié)構(gòu),以及對(duì)數(shù)據(jù)的各種操作。因此,主要有三個(gè)方面的容:數(shù)據(jù)的邏輯結(jié)構(gòu);數(shù)據(jù)的物理存儲(chǔ)結(jié)構(gòu);對(duì)數(shù)據(jù)的操作(或算法)。通常,算法的設(shè)計(jì)取決于數(shù)據(jù)的邏輯結(jié)構(gòu),算法的實(shí)現(xiàn)取決于數(shù)據(jù)的物理存儲(chǔ)結(jié)構(gòu)。數(shù)據(jù)結(jié)構(gòu)是信息的一種組織方式,其目的是為了提高算法的效率,它通常與一組算法的集合相對(duì)應(yīng),通過(guò)這組算法集合可

5、以對(duì)數(shù)據(jù)結(jié)構(gòu)中的數(shù)據(jù)進(jìn)行某種操作。在當(dāng)今信息時(shí)代,信息技術(shù)己成為當(dāng)代知識(shí)經(jīng)濟(jì)的核心技術(shù)。我們時(shí)刻都在和數(shù)據(jù)打交道。比如人們?cè)谕獬龉ぷ鲿r(shí)找最短路徑,在銀行查詢(xún)存款、通過(guò)互聯(lián)網(wǎng)查新聞、以及遠(yuǎn)程教育報(bào)名等,所有這些都在與數(shù)據(jù)發(fā)生關(guān)系。實(shí)際上,現(xiàn)實(shí)世界中的實(shí)體經(jīng)過(guò)抽象以后,就可以成為計(jì)算機(jī)上所處理的數(shù)據(jù)。數(shù)據(jù)結(jié)構(gòu)課程主要是研究非數(shù)值計(jì)算的程序設(shè)計(jì)問(wèn)題中所出現(xiàn)的計(jì)算機(jī)操作對(duì)象以及它們之間的關(guān)系和操作的學(xué)科。 數(shù)據(jù)結(jié)構(gòu)是介于數(shù)學(xué)、 計(jì)算機(jī)軟件和計(jì)算機(jī)硬件之間的一門(mén)計(jì)算機(jī)專(zhuān)業(yè)的核心課程,它是計(jì)算機(jī)程序設(shè)計(jì)、數(shù)據(jù)庫(kù)、操作系統(tǒng)、編譯原理及人工智能等的重要基礎(chǔ),廣泛的應(yīng)用于信息學(xué)、系統(tǒng)工程等各種領(lǐng)域。學(xué)習(xí)數(shù)據(jù)結(jié)構(gòu)

6、是為了將實(shí)際問(wèn)題中所涉及的對(duì)象在計(jì)算機(jī)中表示出來(lái)并對(duì)它們進(jìn)行處理。通過(guò)課程設(shè)計(jì)可以提高學(xué)生的思維能力,促進(jìn)學(xué)生的綜合應(yīng)用能力和專(zhuān)業(yè)素質(zhì)的提高。通過(guò)此次課程設(shè)計(jì)主要達(dá)到以下目的:了解并掌握數(shù)據(jù)結(jié)構(gòu)與算法的設(shè)計(jì)方法,具備初步的獨(dú)立分析和設(shè)計(jì)能力;初步掌握軟件開(kāi)發(fā)過(guò)程的問(wèn)題分析、系統(tǒng)設(shè)計(jì)、程序編碼、測(cè)試等基本方法和技能;提高綜合運(yùn)用所學(xué)的理論知識(shí)和方法獨(dú)立分析和解決問(wèn)題的能力;訓(xùn)練用系統(tǒng)的觀(guān)點(diǎn)和軟件開(kāi)發(fā)一般規(guī)進(jìn)行軟件開(kāi)發(fā), 培養(yǎng)軟件工作者所應(yīng)具備的科學(xué)的工作方法和作風(fēng)。三、題目 - 赫夫曼編碼 / 譯碼器1. 問(wèn)題描述利用赫夫曼編碼進(jìn)行通信可以大大提高信道利用率,縮短信息傳輸時(shí)間,降低傳輸成本。 這

7、要求在發(fā)送端通過(guò)一個(gè)編碼系統(tǒng)對(duì)待傳輸數(shù)據(jù)預(yù)先編碼,在接收端將傳來(lái)的數(shù)據(jù)進(jìn)行譯碼(復(fù)原) 。對(duì)于雙工信道(即可以雙向傳輸信息的信道),每端都需要一個(gè)完整的編/ 譯碼系統(tǒng)。試為這樣的信息收發(fā)站編寫(xiě)一個(gè)赫夫曼碼的編/ 譯碼系統(tǒng)。2.基本要求一個(gè)完整的系統(tǒng)應(yīng)具有以下功能:(1)I :初始化( Initialization)。從終端讀入字符集大小n,以及 n 個(gè)字符和n 個(gè)權(quán)值,建立赫夫曼樹(shù),并將它存于文件hfmTree 中。(2) E:編碼( Encoding )。利用已建好的赫夫曼樹(shù) (如不在存,則從文件 hfmTree 中讀入),對(duì)文件 ToBeTran中的正文進(jìn)行編碼,然后將結(jié)果存入文件Code

8、File 中。(3) D :譯碼( Decoding )。利用已建好的赫夫曼樹(shù)將文件CodeFile中的代碼進(jìn)行譯碼,結(jié)果存入文件Textfile中。以下為選做:(4) P :印代碼文件(Print )。將文件 CodeFile以緊湊格式顯示在終端上,每行50 個(gè)代碼。同時(shí)將此字符形式的編碼文件寫(xiě)入文件CodePrin 中。(5)T:印赫夫曼樹(shù) (Tree printing)。將已在存中的赫夫曼樹(shù)以直觀(guān)的方式(比如樹(shù)) 顯示在終端上,同時(shí)將此字符形式的赫夫曼樹(shù)寫(xiě)入文件TreePrint中。3. 測(cè)試要求(1) 已知某系統(tǒng)在通信聯(lián)絡(luò)中只可能出現(xiàn)八種字符,其頻率分別為0.05,0.29,0.07,

9、0.08,0.14,0.23,0.03,0.11,試設(shè)計(jì)赫夫曼編碼。(2)用下表給出的字符集和頻度的實(shí)際統(tǒng)計(jì)數(shù)據(jù)建立赫夫曼樹(shù),并實(shí)現(xiàn)以下報(bào)文的編碼和譯碼:“ THISPROGRAME IS MY FAVORITE”。字符ABCDEFGHIJKLM頻度6413223210321154757153220字符NOPQRSTUVWXYZ頻度57631514851802381811614.實(shí)現(xiàn)提示(1)編碼結(jié)果以文本方式存儲(chǔ)在文件Codefile中。(2)用戶(hù)界面可以設(shè)計(jì)為“菜單”方式:顯示上述功能符號(hào),再加上“Q”,表示退出運(yùn)行Quit 。請(qǐng)用戶(hù)鍵入一個(gè)選擇功能符。此功能執(zhí)行完畢后再顯示此菜單,直至某

10、次用戶(hù)選擇了“Q”為止。(3) 在程序的一次執(zhí)行過(guò)程中,第一次執(zhí)行 I , D 或 C命令之后,赫夫曼樹(shù)已經(jīng)在存了,不必再讀入。每次執(zhí)行中不一定執(zhí)行 I 命令,因?yàn)槲募?hfmTree 可能早已建好。四、具體要求 :課程設(shè)計(jì)成果的容必須由以下四個(gè)部分組成,缺一不可。(1)上交源程序:學(xué)生按照實(shí)驗(yàn)題目的具體要求所開(kāi)發(fā)的所有源程序(應(yīng)該放到一個(gè)文件夾中);(2) 上交程序的說(shuō)明文件: (保存在 .txt 中)在說(shuō)明文檔中應(yīng)該寫(xiě)明上交程序所在的目錄,上交程序的主程序文件名,如果需要安裝,要有程序的安裝使用說(shuō)明;(3)設(shè)計(jì)報(bào)告:(保存在word文檔中,文件名要求:按照“ _學(xué)號(hào) _設(shè)計(jì)題目”起名,如文

11、件名為“ 三 _XXX_赫夫曼編碼” .doc。打印稿用A4 紙)。其中包括 :題目;實(shí)驗(yàn)?zāi)康?;需求分析:在該部分中敘述?shí)現(xiàn)的功能要求;概要設(shè)計(jì):在此說(shuō)明每個(gè)部分的算法設(shè)計(jì)說(shuō)明 (可以是描述算法的流程圖) ,每個(gè)程序中使用的存儲(chǔ)結(jié)構(gòu)設(shè)計(jì)說(shuō)明(如果指定存儲(chǔ)結(jié)構(gòu)請(qǐng)寫(xiě)出該存儲(chǔ)結(jié)構(gòu)的定義);詳細(xì)設(shè)計(jì)各個(gè)算法實(shí)現(xiàn)的源程序, 對(duì)每個(gè)題目要有相應(yīng)的源程序 (可以是一組源程序, 每個(gè)功能模塊采用不同的函數(shù)實(shí)現(xiàn))。源程序要按照寫(xiě)程序的規(guī)則來(lái)編寫(xiě)。要結(jié)構(gòu)清晰,重點(diǎn)函數(shù)的重點(diǎn)變量、重點(diǎn)功能部分要加上清晰的程序注釋?zhuān)徽{(diào)試分析測(cè)試數(shù)據(jù), 測(cè)試輸出的結(jié)果,時(shí)間復(fù)雜度分析,和每個(gè)模塊設(shè)計(jì)和調(diào)試時(shí)存在問(wèn)題的思考(問(wèn)題是哪些?

12、問(wèn)題如何解決?),算法的改進(jìn)設(shè)想;總結(jié):總結(jié)可以包括 : 設(shè)計(jì)過(guò)程的收獲、遇到問(wèn)題及解決問(wèn)題過(guò)程的思考、程序調(diào)試能力的思考、對(duì)數(shù)據(jù)結(jié)構(gòu)這門(mén)課程的思考、在設(shè)計(jì)過(guò)程中對(duì)數(shù)據(jù)結(jié)構(gòu)課程的認(rèn)識(shí)等容。( 4)考核成績(jī)?cè)u(píng)定標(biāo)準(zhǔn):本課程設(shè)計(jì)的評(píng)價(jià)由三部分組成,包括程序演示 ( 50%),課程設(shè)計(jì)報(bào)告 ( 30%),回答教師提問(wèn) ( 20%)。1程序演示:?優(yōu)功能完善,全部測(cè)試正確,并且能夠?qū)植窟M(jìn)行完善。?良功能完善,但測(cè)試欠缺。?中功能基本完善,但程序尚有部分錯(cuò)誤。?及格完成存中赫夫曼編碼/ 譯碼,但不涉及文件操作。?不及格功能不完善,且程序錯(cuò)誤較多,無(wú)法運(yùn)行。2課程設(shè)計(jì)報(bào)告:1優(yōu)包括設(shè)計(jì)容,設(shè)計(jì)思想,已經(jīng)

13、完成的任務(wù)及達(dá)到的目標(biāo),設(shè)計(jì)思路清晰、書(shū)寫(xiě)條理清楚,源程序結(jié)構(gòu)合理、清晰,注釋說(shuō)明完整,有對(duì)本次課程設(shè)計(jì)的心得體會(huì)。2良包括設(shè)計(jì)容,設(shè)計(jì)思想,已經(jīng)完成的任務(wù)及達(dá)到的目標(biāo),設(shè)計(jì)思路基本清晰、書(shū)寫(xiě)條理基本清楚,源程序結(jié)構(gòu)合理、清晰,注釋說(shuō)明基本完整,有對(duì)本次課程設(shè)計(jì)的心得體會(huì)。3中課程設(shè)計(jì)報(bào)告容基本完整,思路較清晰,書(shū)寫(xiě)基本清楚,源程序結(jié)構(gòu)尚可,有注釋說(shuō)明但不完整。4及格課程設(shè)計(jì)報(bào)告容基本完整,思路較差,書(shū)寫(xiě)尚清楚。5 不及格 課程設(shè)計(jì)報(bào)告容不完整,書(shū)寫(xiě)沒(méi)有條理。3回答教師提問(wèn):1.優(yōu)能回答教師提出的所有問(wèn)題,并完全正確,思路清晰2.良基本能回答教師提出的所有問(wèn)題,有些小錯(cuò)誤3.中基本能回答教師提

14、出的問(wèn)題,少數(shù)問(wèn)題回答錯(cuò)誤或不清楚4. 及格 能回答教師提出的問(wèn)題,但較多問(wèn)題回答錯(cuò)誤或不能回答5. 不及格基本不能回答教師提出的問(wèn)題四、概要設(shè)計(jì)1) 問(wèn)題分析哈夫曼樹(shù)的定義1. 哈夫曼樹(shù)節(jié)點(diǎn)的數(shù)據(jù)類(lèi)型定義為:typedef struct/赫夫曼樹(shù)的結(jié)構(gòu)體char ch;int weight;/權(quán)值int parent,lchild,rchild;htnode,*hfmtree;2)所實(shí)現(xiàn)的功能函數(shù)如下1、void hfmcoding(hfmtree &HT,hfmcode &HC,int n) 初始化哈夫曼樹(shù), 處理 InputHuffman(Huffman 函數(shù)得到的數(shù)據(jù),

15、按照哈夫曼規(guī)則建立 2 叉樹(shù)。此函數(shù)塊調(diào)用了 Select ()函數(shù)。Hfm)2、 void Select(hfmtree &HT,int a,int *p1,int *p2)/Select函數(shù),選出HT 樹(shù)到a 為止,權(quán)值最小且parent為 0 的2 個(gè)節(jié)點(diǎn)2 、 int main()主函數(shù):利用已建好的哈夫曼樹(shù)(如不在存,則從文件hfmtree.txt中讀入)對(duì)文件中的正文進(jìn)行編碼,然后將結(jié)果存入文件codefile.txt中。如果正文中沒(méi)有要編碼的字符,則鍵盤(pán)讀入并存儲(chǔ)到ToBeTran 文件中。讀入ToBeTran 中將要編碼的容,將編碼好的哈夫曼編碼存儲(chǔ)到CodeFile中

16、。3、 Encoding編碼功能:對(duì)輸入字符進(jìn)行編碼4、 Decoding譯碼功能:利用已建好的哈夫曼樹(shù)將文件codefile.txt中的代碼進(jìn)行譯碼,結(jié)果存入文件textfile.dat中。Print()打印功能函數(shù):輸出哈夫曼樹(shù),字符,權(quán)值,以及它對(duì)應(yīng)的編碼。5. 主函數(shù)的簡(jiǎn)要說(shuō)明,主函數(shù)主要設(shè)計(jì)的是一個(gè)分支語(yǔ)句,讓用戶(hù)挑選所實(shí)現(xiàn)的功能。使用鏈樹(shù)存儲(chǔ),然后分別調(diào)用統(tǒng)計(jì)頻數(shù)函數(shù),排序函數(shù),建立哈夫曼函數(shù),編碼函數(shù),譯碼函數(shù)來(lái)實(shí)現(xiàn)功能。2) 系統(tǒng)結(jié)構(gòu)圖(功能模塊圖)五程序說(shuō)明1). 哈夫曼編碼 / 譯碼器源代碼#include<iostream.h>#include<stdi

17、o.h>#include<stdlib.h>#include<string.h>#include<fstream.h>typedef struct/赫夫曼樹(shù)的結(jié)構(gòu)體char ch;int weight;/權(quán)值int parent,lchild,rchild;htnode,*hfmtree;typedef char *hfmcode;void Select(hfmtree &HT,int a,int *p1,int *p2)/Select函數(shù),選出HT樹(shù)到 a 為止,權(quán)值最小且parent為0的2個(gè)節(jié)點(diǎn)int i,j,x,y;for(j=1;j&

18、lt;=a;+j)if(HTj.parent=0)x=j;break;for(i=j+1;i<=a;+i)if(HTi.weight<HTx.weight&&HTi.parent=0)x=i;/選出最小的節(jié)點(diǎn)for(j=1;j<=a;+j)if(HTj.parent=0&&x!=j)y=j;break;for(i=j+1;i<=a;+i)if(HTi.weight<HTy.weight&&HTi.parent=0&&x!=i)y=i;/選出次小的節(jié)點(diǎn)if(x>y)*p1=y;*p2=x;else

19、*p1=x;*p2=y;void hfmcoding(hfmtree &HT,hfmcode &HC,int n) /構(gòu)建赫夫曼樹(shù)HT,并求出n 個(gè)字符的赫夫曼編碼 HCint i,start,c,f,m,w;int p1,p2;char *cd,z;if(n<=1)return;m=2*n-1;HT=(hfmtree)malloc(m+1)*sizeof(htnode);for(i=1;i<=n;+i)/初始化n 個(gè)葉子結(jié)點(diǎn)printf("請(qǐng)輸入第 %d字符信息和權(quán)值:",i);scanf("%c%d",&z,&am

20、p;w);while(getchar()!='n')continue;HTi.ch=z;HTi.weight=w;HTi.parent=0;HTi.lchild=0;HTi.rchild=0;for(;i<=m;+i)/初始化其余的結(jié)點(diǎn)HTi.ch='0'HTi.weight=0;HTi.parent=0;HTi.lchild=0;HTi.rchild=0;for(i=n+1;i<=m;+i)/建立赫夫曼樹(shù)Select(HT,i-1,&p1,&p2);HTp1.parent=i;HTp2.parent=i;HTi.lchild=p1;

21、HTi.rchild=p2;HTi.weight=HTp1.weight+HTp2.weight;HC=(hfmcode)malloc(n+1)*sizeof(char *);cd=(char *)malloc(n*sizeof(char);cdn-1='0'for(i=1;i<=n;+i)/給 n 個(gè)字符編碼start=n-1;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-

22、start)*sizeof(char);strcpy(HCi,&cdstart);free(cd);int main()char code100,h100,hl100;int n,i,j,k,l;ifstream input_file;/文件輸入輸出流ofstream output_file;char choice,str100;hfmtree HT;hfmcode HC;cout<<"n"cout<<""<<"計(jì)算機(jī)( 3)班 "<<"while(choice!=&#

23、39;Q'&&choice!='q')/"<<"Q07620307"<<"當(dāng) choice"<<"XXXn"的值不為q 且不為Q時(shí)循環(huán)cout<<""<<"*赫夫曼編碼 / 譯碼器*n"cout<<""<<"I.Init"<<""<<"E.Encoding"&l

24、t;<""<<"D.Decoding"<<""<<"Q.Exitn"cout<<"請(qǐng)輸入您要操作的步驟:"cin>>choice;if(choice='I'|choice='i')/初始化赫夫曼樹(shù)cout<<" 請(qǐng)輸入字符個(gè)數(shù):"cin>>n;hfmcoding(HT,HC,n);for(i=1;i<=n;+i)cout<<HTi.ch&

25、lt;<":"<<HCi<<endl;output_file.open("hfmTree.txt");if(!output_file)cout<<"can't oen file!"<<endl;return 1;for(i=1;i<=n;i+)output_file<<"("<<HTi.ch<<HCi<<")"output_file.close();cout<<&quo

26、t; 赫夫曼樹(shù)已經(jīng)創(chuàng)建完畢,并且已經(jīng)放入hfmTree.txt文件中 !"<<endl;elseif(choice='E'|choice='e')/進(jìn)行編碼, 并將字符放入ToBeTran.txt,碼值放入CodeFile.txt中printf("請(qǐng)輸入字符: ");gets(str);output_file.open("ToBeTran.txt");if(!output_file)cout<<"can't oen file!"<<endl;retu

27、rn 1;output_file<<str<<endl;output_file.close();output_file.open("CodeFile.txt");if(!output_file)cout<<"can't oen file!"<<endl;return 1;for(i=0;i<strlen(str);i+)for(j=0;j<=n;+j)if(HTj.ch=stri)output_file<<HCj;break;output_file.close();cout&

28、lt;<"n"cout<<" 編碼完畢,并且已經(jīng)存入input_file.open("CodeFile.txt");/CodeFile.txt文件! n"從 CodeFile.txt中讀入編碼,輸出在終端if(!input_file)cout<<"can't oen file!"<<endl;return 1;input_file>>code;cout<<" 編碼碼值為: "<<code<<endl

29、;input_file.close();elseif(choice='D'|choice='d')/讀入 CodeFile.txt中的編碼進(jìn)行譯碼,將譯出來(lái)的字符放入Textfile.txt中input_file.open("CodeFile.txt");if(!input_file)cout<<"can't oen file!"<<endl;return 1;input_file>>h;input_file.close();output_file.open("Textfile.txt");if(!output_file)cout<<"can't oen file!"<<endl;return 1;k=0;while(hk!='0')/先用編碼中的前幾個(gè)和字符的編碼相比較,然后往后移for(i=1;i<=n;i+)l=k;for(j=0;j<strlen(HCi);j+,l+)hlj=hl;hlj='0'if(strcmp(HCi,hl)=0)output_file<<HTi.ch;k=k+strlen(HC

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論