版權說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權,請進行舉報或認領
文檔簡介
1、<p> 《 數(shù)據(jù)結構與算法 》課程設計</p><p> ?。?009/2010學年第二學期第20周)</p><p><b> 指導教師: </b></p><p> 班級:計算機科學與技術(3)班</p><p><b> 學號:</b></p><p&
2、gt;<b> 姓名:</b></p><p> 《數(shù)據(jù)結構與算法》課程設計</p><p><b> 目 錄</b></p><p><b> 前言</b></p><p><b> 摘要</b></p><p>
3、 《數(shù)據(jù)結構與算法》課程設計任務書</p><p><b> 二、實驗目的</b></p><p> 三、題目--赫夫曼編碼/譯碼器</p><p><b> 問題描述</b></p><p><b> 基本要求</b></p><p><
4、;b> 測試要求</b></p><p><b> 實現(xiàn)提示</b></p><p> 需求分析--具體要求</p><p><b> 概要設計</b></p><p><b> 程序說明</b></p><p><b&
5、gt; 詳細設計</b></p><p><b> 實驗心得與體會</b></p><p><b> 前言</b></p><p><b> 摘要</b></p><p> 隨著計算機的普遍應用與日益發(fā)展,其應用早已不局限于簡單的數(shù)值運算,而涉及到問題的分
6、析、數(shù)據(jù)結構框架的設計以及設計最短路線等復雜的非數(shù)值處理和操作。算法與數(shù)據(jù)結構的學習就是為以后利用計算機資源高效地開發(fā)非數(shù)值處理的計算機程序打下堅實的理論、方法和技術基礎。</p><p> 算法與數(shù)據(jù)結構旨在分析研究計算機加工的數(shù)據(jù)對象的特性,以便選擇適當?shù)臄?shù)據(jù)結構和存儲結構,從而使建立在其上的解決問題的算法達到最優(yōu)。</p><p> 數(shù)據(jù)結構是在整個計算機科學與技術領域上廣泛被使
7、用的術語。它用來反映一個數(shù)據(jù)的內(nèi)部構成,即一個數(shù)據(jù)由那些成分數(shù)據(jù)構成,以什么方式構成,呈什么結構。數(shù)據(jù)結構有邏輯上的數(shù)據(jù)結構和物理上的數(shù)據(jù)結構之分。邏輯上的數(shù)據(jù)結構反映成分數(shù)據(jù)之間的邏輯關系,而物理上的數(shù)據(jù)結構反映成分數(shù)據(jù)在計算機內(nèi)部的存儲安排。數(shù)據(jù)結構是數(shù)據(jù)存在的形式。</p><p> 《數(shù)據(jù)結構》主要介紹一些最常用的數(shù)據(jù)結構,闡明各種數(shù)據(jù)結構內(nèi)在的邏輯關系,討論其在計算機中的存儲表示,以及在其上進行各種運
8、算時的實現(xiàn)算法,并對算法的效率進行簡單的分析和討論。數(shù)據(jù)結構是介于數(shù)學、計算機軟件和計算機硬件之間的一門計算機專業(yè)的核心課程,它是計算機程序設計、數(shù)據(jù)庫、操作系統(tǒng)、編譯原理及人工智能等的重要基礎,廣泛的應用于信息學、系統(tǒng)工程等各種領域。</p><p> 學習數(shù)據(jù)結構是為了將實際問題中所涉及的對象在計算機中表示出來并對它們進行處理。通過課程設計可以提高學生的思維能力,促進學生的綜合應用能力和專業(yè)素質(zhì)的提高。&l
9、t;/p><p> 《數(shù)據(jù)結構與算法》課程設計任務書</p><p> 《數(shù)據(jù)結構與算法》是計算機專業(yè)重要的核心課程之一,在計算機專業(yè)的學習過程中占有非常重要的地位。《數(shù)據(jù)結構與算法課程設計》就是要運用本課程以及到目前為止的有關課程中的知識和技術來解決實際問題。特別是面臨非數(shù)值計算類型的應用問題時,需要選擇適當?shù)臄?shù)據(jù)結構,設計出滿足一定時間和空間限制的有效算法。</p>&l
10、t;p> 本課程設計要求同學獨立完成一個較為完整的應用需求分析。并在設計和編寫具有一定規(guī)模程序的過程中,深化對《數(shù)據(jù)結構與算法》課程中基本概念、理論和方法的理解;訓練綜合運用所學知識處理實際問題的能力,強化面向?qū)ο蟮某绦蛟O計理念;使自己的程序設計與調(diào)試水平有一個明顯的提高。 </p><p><b> 二、實驗目的</b></p><p> 數(shù)據(jù)結構作為一
11、門學科主要研究數(shù)據(jù)的各種邏輯結構和存儲結構,以及對數(shù)據(jù)的各種操作。因此,主要有三個方面的內(nèi)容:數(shù)據(jù)的邏輯結構;數(shù)據(jù)的物理存儲結構;對數(shù)據(jù)的操作(或算法)。通常,算法的設計取決于數(shù)據(jù)的邏輯結構,算法的實現(xiàn)取決于數(shù)據(jù)的物理存儲結構。數(shù)據(jù)結構是信息的一種組織方式,其目的是為了提高算法的效率,它通常與一組算法的集合相對應,通過這組算法集合可以對數(shù)據(jù)結構中的數(shù)據(jù)進行某種操作。</p><p> 在當今信息時代,信息技術己
12、成為當代知識經(jīng)濟的核心技術。我們時刻都在和數(shù)據(jù)打交道。比如人們在外出工作時找最短路徑,在銀行查詢存款、通過互聯(lián)網(wǎng)查新聞、以及遠程教育報名等,所有這些都在與數(shù)據(jù)發(fā)生關系。實際上,現(xiàn)實世界中的實體經(jīng)過抽象以后,就可以成為計算機上所處理的數(shù)據(jù)。</p><p> 數(shù)據(jù)結構課程主要是研究非數(shù)值計算的程序設計問題中所出現(xiàn)的計算機操作對象以及它們之間的關系和操作的學科。數(shù)據(jù)結構是介于數(shù)學、計算機軟件和計算機硬件之間的一門計
13、算機專業(yè)的核心課程,它是計算機程序設計、數(shù)據(jù)庫、操作系統(tǒng)、編譯原理及人工智能等的重要基礎,廣泛的應用于信息學、系統(tǒng)工程等各種領域。</p><p> 學習數(shù)據(jù)結構是為了將實際問題中所涉及的對象在計算機中表示出來并對它們進行處理。通過課程設計可以提高學生的思維能力,促進學生的綜合應用能力和專業(yè)素質(zhì)的提高。通過此次課程設計主要達到以下目的:</p><p> 了解并掌握數(shù)據(jù)結構與算法的設計
14、方法,具備初步的獨立分析和設計能力;</p><p> 初步掌握軟件開發(fā)過程的問題分析、系統(tǒng)設計、程序編碼、測試等基本方法和技能;</p><p> 提高綜合運用所學的理論知識和方法獨立分析和解決問題的能力;</p><p> 訓練用系統(tǒng)的觀點和軟件開發(fā)一般規(guī)范進行軟件開發(fā),培養(yǎng)軟件工作者所應具備的科學的工作方法和作風。</p><p>
15、; 三、題目--赫夫曼編碼/譯碼器</p><p><b> 1. 問題描述</b></p><p> 利用赫夫曼編碼進行通信可以大大提高信道利用率,縮短信息傳輸時間,降低傳輸成本。這要求在發(fā)送端通過一個編碼系統(tǒng)對待傳輸數(shù)據(jù)預先編碼,在接收端將傳來的數(shù)據(jù)進行譯碼(復原)。對于雙工信道(即可以雙向傳輸信息的信道),每端都需要一個完整的編/譯碼系統(tǒng)。試為這樣的信息收
16、發(fā)站編寫一個赫夫曼碼的編/譯碼系統(tǒng)。</p><p><b> 基本要求</b></p><p> 一個完整的系統(tǒng)應具有以下功能:</p><p> (1) I:初始化(Initialization)。從終端讀入字符集大小n,以及n個字符和n個權值,建立赫夫曼樹,并將它存于文件hfmTree中。</p><p>
17、 (2) E:編碼(Encoding)。利用已建好的赫夫曼樹(如不在內(nèi)存,則從文件hfmTree中讀入),對文件ToBeTran中的正文進行編碼,然后將結果存入文件CodeFile中。</p><p> (3) D:譯碼(Decoding)。利用已建好的赫夫曼樹將文件CodeFile中的代碼進行譯碼,結果存入文件Textfile中。</p><p><b> 以下為選做:&l
18、t;/b></p><p> (4) P:印代碼文件(Print)。將文件CodeFile以緊湊格式顯示在終端上,每行50個代碼。同時將此字符形式的編碼文件寫入文件CodePrin中。</p><p> (5) T:印赫夫曼樹(Tree printing)。將已在內(nèi)存中的赫夫曼樹以直觀的方式(比如樹)顯示在終端上,同時將此字符形式的赫夫曼樹寫入文件TreePrint 中。<
19、;/p><p><b> 測試要求</b></p><p> (1) 已知某系統(tǒng)在通信聯(lián)絡中只可能出現(xiàn)八種字符,其頻率分別為0.05,0.29,0.07,0.08,0.14,0.23,0.03,0.11,試設計赫夫曼編碼。</p><p> (2) 用下表給出的字符集和頻度的實際統(tǒng)計數(shù)據(jù)建立赫夫曼樹,并實現(xiàn)以下報文的編碼和譯碼:“THIS P
20、ROGRAME IS MY FAVORITE”。</p><p><b> 實現(xiàn)提示</b></p><p> (1) 編碼結果以文本方式存儲在文件Codefile中。</p><p> (2) 用戶界面可以設計為“菜單”方式:顯示上述功能符號,再加上“Q”,表示退出運行Quit。請用戶鍵入一個選擇功能符。此功能執(zhí)行完畢后再顯示此菜
21、單,直至某次用戶選擇了“Q”為止。</p><p> (3) 在程序的一次執(zhí)行過程中,第一次執(zhí)行I,D或C命令之后,赫夫曼樹已經(jīng)在內(nèi)存了,不必再讀入。每次執(zhí)行中不一定執(zhí)行I命令,因為文件hfmTree可能早已建好。</p><p><b> 四、具體要求:</b></p><p> 課程設計成果的內(nèi)容必須由以下四個部分組成,缺一不可。&l
22、t;/p><p> (1) 上交源程序:學生按照實驗題目的具體要求所開發(fā)的所有源程序(應該放到一個文件夾中);</p><p> (2) 上交程序的說明文件:(保存在.txt中)在說明文檔中應該寫明上交程序所在的目錄,上交程序的主程序文件名,如果需要安裝,要有程序的安裝使用說明;</p><p> (3) 設計報告:(保存在word 文檔中,文件名要求: 按照“姓
23、名_學號_設計題目”起名,如文件名為“ 張三_XXX_赫夫曼編碼 ”.doc。打印稿用A4紙)。</p><p><b> 其中包括:</b></p><p><b> 題目;</b></p><p><b> 實驗目的;</b></p><p> 需求分析:在該部分中
24、敘述實現(xiàn)的功能要求;</p><p><b> 概要設計:</b></p><p> 在此說明每個部分的算法設計說明(可以是描述算法的流程圖),每個程序中使用的存儲結構設計說明(如果指定存儲結構請寫出該存儲結構的定義);</p><p><b> 詳細設計</b></p><p> 各個算法
25、實現(xiàn)的源程序,對每個題目要有相應的源程序(可以是一組源程序,每個功能模塊采用不同的函數(shù)實現(xiàn))。源程序要按照寫程序的規(guī)則來編寫。要結構清晰,重點函數(shù)的重點變量、重點功能部分要加上清晰的程序注釋;</p><p><b> 調(diào)試分析</b></p><p> 測試數(shù)據(jù),測試輸出的結果,時間復雜度分析,和每個模塊設計和調(diào)試時存在問題的思考(問題是哪些?問題如何解決?),
26、算法的改進設想;</p><p><b> 總結: </b></p><p> 總結可以包括 : 設計過程的收獲、遇到問題及解決問題過程的思考、程序調(diào)試能力的思考、對數(shù)據(jù)結構這門課程的思考、在設計過程中對《數(shù)據(jù)結構》課程的認識等內(nèi)容。</p><p> ?。?)考核成績評定標準:</p><p> 本課程設計的評價
27、由三部分組成,包括程序演示(50%),課程設計報告(30%),回答教師提問(20%)。</p><p><b> 1.程序演示:</b></p><p> 優(yōu)功能完善,全部測試正確,并且能夠?qū)植窟M行完善。</p><p> 良功能完善,但測試欠缺。</p><p> 中功能基本完善,但程序尚有部分錯
28、誤。</p><p> 及格完成內(nèi)存中赫夫曼編碼/譯碼,但不涉及文件操作。</p><p> 不及格功能不完善,且程序錯誤較多,無法運行。</p><p><b> 2.課程設計報告:</b></p><p> 優(yōu)包括設計內(nèi)容,設計思想,已經(jīng)完成的任務及達到的目標,設計思路清晰、書寫條理清楚,源程序結構合
29、理、清晰,注釋說明完整,有對本次課程設計的心得體會。</p><p> 良包括設計內(nèi)容,設計思想,已經(jīng)完成的任務及達到的目標,設計思路基本清晰、書寫條理基本清楚,源程序結構合理、清晰,注釋說明基本完整,有對本次課程設計的心得體會。</p><p> 中課程設計報告內(nèi)容基本完整,思路較清晰,書寫基本清楚,源程序結構尚可,有注釋說明但不完整。</p><p>
30、; 及格課程設計報告內(nèi)容基本完整,思路較差,書寫尚清楚。</p><p> 不及格課程設計報告內(nèi)容不完整,書寫沒有條理。</p><p><b> 3.回答教師提問:</b></p><p> 優(yōu)能回答教師提出的所有問題,并完全正確,思路清晰</p><p> 良基本能回答教師提出的所有問題,有些小
31、錯誤</p><p> 中基本能回答教師提出的問題,少數(shù)問題回答錯誤或不清楚</p><p> 及格能回答教師提出的問題,但較多問題回答錯誤或不能回答</p><p> 不及格基本不能回答教師提出的問題</p><p><b> 概要設計</b></p><p> 問題分析哈夫曼
32、樹的定義</p><p> 1.哈夫曼樹節(jié)點的數(shù)據(jù)類型定義為:</p><p> typedef struct{ //赫夫曼樹的結構體</p><p><b> char ch;</b></p><p> int weight; //權值</p><
33、;p> int parent,lchild,rchild;</p><p> }htnode,*hfmtree;</p><p> 2)所實現(xiàn)的功能函數(shù)如下</p><p> 1、void hfmcoding(hfmtree &HT,hfmcode &HC,int n)初始化哈夫曼樹,處理InputHuffman(Huffman Hfm
34、)函數(shù)得到的數(shù)據(jù),按照哈夫曼規(guī)則建立2叉樹。此函數(shù)塊調(diào)用了Select()函數(shù)。</p><p> 2、void Select(hfmtree &HT,int a,int *p1,int *p2) //Select函數(shù),選出HT樹到a為止,權值最小且parent為0的2個節(jié)點</p><p> 2、 int main()</p><p>
35、; 主函數(shù): 利用已建好的哈夫曼樹(如不在內(nèi)存,則從文件hfmtree.txt中讀入)</p><p> 對文件中的正文進行編碼,然后將結果存入文件codefile.txt中。如果正文中沒有要編碼的字符,則鍵盤讀入并存儲到ToBeTran文件中。讀入ToBeTran中將要編碼的內(nèi)容,將編碼好的哈夫曼編碼存儲到CodeFile中。</p><p> 3、Encoding </p&
36、gt;<p> 編碼功能:對輸入字符進行編碼</p><p> 4、Decoding</p><p> 譯碼功能: 利用已建好的哈夫曼樹將文件codefile.txt中的代碼進行譯碼,結果存入文件textfile.dat 中。</p><p> Print() 打印功能函數(shù):輸出哈夫曼樹,字符,權值,以及它對應的編碼。</p>&
37、lt;p> 5.主函數(shù)的簡要說明,主函數(shù)主要設計的是一個分支語句,讓用戶挑選所實現(xiàn)的功能。</p><p> 使用鏈樹存儲,然后分別調(diào)用統(tǒng)計頻數(shù)函數(shù),排序函數(shù),建立哈夫曼函數(shù),編碼函數(shù),譯碼函數(shù)來實現(xiàn)功能。</p><p> 系統(tǒng)結構圖(功能模塊圖)</p><p><b> 程序說明</b></p><p&g
38、t; .哈夫曼編碼/譯碼器源代碼</p><p> #include<iostream.h></p><p> #include<stdio.h></p><p> #include<stdlib.h></p><p> #include<string.h></p>&l
39、t;p> #include<fstream.h></p><p> typedef struct{ //赫夫曼樹的結構體</p><p><b> char ch;</b></p><p> int weight; //權值</p><p> int
40、parent,lchild,rchild;</p><p> }htnode,*hfmtree;</p><p> typedef char **hfmcode;</p><p> void Select(hfmtree &HT,int a,int *p1,int *p2) //Select函數(shù),選出HT樹到a為止,權值最小且parent為0的2個節(jié)點
41、</p><p><b> {</b></p><p> int i,j,x,y;</p><p> for(j=1;j<=a;++j){</p><p> if(HT[j].parent==0){</p><p><b> x=j;</b></p>
42、;<p><b> break;</b></p><p><b> }</b></p><p><b> }</b></p><p> for(i=j+1;i<=a;++i){</p><p> if(HT[i].weight<HT[x].w
43、eight&&HT[i].parent==0){</p><p> x=i; //選出最小的節(jié)點</p><p><b> }</b></p><p><b> }</b></p><p> for(j=1;j<=a;++j){<
44、;/p><p> if(HT[j].parent==0&&x!=j)</p><p><b> {</b></p><p><b> y=j;</b></p><p><b> break;</b></p><p><b>
45、 }</b></p><p><b> }</b></p><p> for(i=j+1;i<=a;++i)</p><p><b> {</b></p><p> if(HT[i].weight<HT[y].weight&&HT[i].parent
46、==0&&x!=i)</p><p><b> {</b></p><p> y=i; //選出次小的節(jié)點</p><p><b> }</b></p><p><b> }</b></p><p&g
47、t;<b> if(x>y){</b></p><p><b> *p1=y;</b></p><p><b> *p2=x;</b></p><p><b> }</b></p><p><b> else</b>&
48、lt;/p><p><b> {</b></p><p><b> *p1=x;</b></p><p><b> *p2=y;</b></p><p><b> }</b></p><p><b> }</b
49、></p><p> void hfmcoding(hfmtree &HT,hfmcode &HC,int n) //構建赫夫曼樹HT,并求出n個字符的赫夫曼編碼HC</p><p><b> {</b></p><p> int i,start,c,f,m,w;</p><p> int
50、p1,p2;</p><p> char *cd,z;</p><p><b> if(n<=1){</b></p><p><b> return;</b></p><p><b> }</b></p><p><b> m=
51、2*n-1;</b></p><p> HT=(hfmtree)malloc((m+1)*sizeof(htnode));</p><p> for(i=1;i<=n;++i) //初始化n個葉子結點</p><p><b> {</b></p><p> printf(&
52、quot;請輸入第%d字符信息和權值:",i);</p><p> scanf("%c%d",&z,&w);</p><p> while(getchar()!='\n')</p><p><b> {</b></p><p><b> co
53、ntinue;</b></p><p><b> }</b></p><p> HT[i].ch=z;</p><p> HT[i].weight=w;</p><p> HT[i].parent=0;</p><p> HT[i].lchild=0;</p>
54、<p> HT[i].rchild=0;</p><p><b> }</b></p><p> for(;i<=m;++i) //初始化其余的結點</p><p><b> {</b></p><p> HT[i].ch='0';</p
55、><p> HT[i].weight=0;</p><p> HT[i].parent=0;</p><p> HT[i].lchild=0;</p><p> HT[i].rchild=0;</p><p><b> }</b></p><p> for(i=n+
56、1;i<=m;++i) //建立赫夫曼樹</p><p><b> {</b></p><p> Select(HT,i-1,&p1,&p2);</p><p> HT[p1].parent=i;HT[p2].parent=i;</p><p> HT[i].lchild=p1
57、;HT[i].rchild=p2;</p><p> HT[i].weight=HT[p1].weight+HT[p2].weight;</p><p><b> }</b></p><p> HC=(hfmcode)malloc((n+1)*sizeof(char *));</p><p> cd=(char
58、*)malloc(n*sizeof(char));</p><p> cd[n-1]='\0';</p><p> for(i=1;i<=n;++i) //給n個字符編碼</p><p><b> {</b></p><p> start=n-1;</p>
59、;<p> for(c=i,f=HT[i].parent;f!=0;c=f,f=HT[f].parent)</p><p><b> {</b></p><p> if(HT[f].lchild==c)</p><p><b> {</b></p><p> cd[--sta
60、rt]='0';</p><p><b> }</b></p><p><b> else</b></p><p><b> {</b></p><p> cd[--start]='1';</p><p><
61、b> }</b></p><p><b> }</b></p><p> HC[i]=(char*)malloc((n-start)*sizeof(char));</p><p> strcpy(HC[i],&cd[start]);</p><p><b> }</b&
62、gt;</p><p><b> free(cd);</b></p><p><b> }</b></p><p> int main(){</p><p> char code[100],h[100],hl[100];</p><p> int n,i,j,k,l
63、;</p><p> ifstream input_file; //文件輸入輸出流</p><p> ofstream output_file;</p><p> char choice,str[100];</p><p> hfmtree HT;</p><p> hfmcode HC;</p&
64、gt;<p> cout<<"\n";</p><p> cout<<" "<<"計算機(3)班"<<" "<<"Q07620307"<<" "<<"XX
65、X\n";</p><p> while(choice!='Q'&&choice!='q') //當choice的值不為q且不為Q時循環(huán)</p><p><b> {</b></p><p> cout<<" &quo
66、t;<<"*************************赫夫曼編碼/譯碼器*************************\n";</p><p> cout<<" "<<"I.Init"<<" "<<"E.Encodin
67、g"<<" "<<"D.Decoding"<<" "<<"Q.Exit\n";</p><p> cout<<"請輸入您要操作的步驟:";</p><p> cin>>choic
68、e;</p><p> if(choice=='I'||choice=='i') //初始化赫夫曼樹</p><p><b> {</b></p><p> cout<<"請輸入字符個數(shù):";</p><p><b>
69、; cin>>n;</b></p><p> hfmcoding(HT,HC,n);</p><p> for(i=1;i<=n;++i)</p><p><b> {</b></p><p> cout<<HT[i].ch<<":"&l
70、t;<HC[i]<<endl;</p><p><b> }</b></p><p> output_file.open("hfmTree.txt");</p><p> if(!output_file){</p><p> cout<<"can'
71、;t oen file!"<<endl;</p><p><b> return 1;</b></p><p><b> }</b></p><p> for(i=1;i<=n;i++)</p><p><b> {</b></p>
72、;<p> output_file<<"("<<HT[i].ch<<HC[i]<<")";</p><p><b> }</b></p><p> output_file.close();</p><p> cout<<&q
73、uot;赫夫曼樹已經(jīng)創(chuàng)建完畢,并且已經(jīng)放入hfmTree.txt文件中!"<<endl;</p><p><b> }</b></p><p> else if(choice=='E'||choice=='e') //進行編碼,并將字符放入ToBeTran.txt,碼值放入CodeFile.
74、txt中</p><p><b> {</b></p><p> printf("請輸入字符:");</p><p> gets(str);</p><p> output_file.open("ToBeTran.txt");</p><p> i
75、f(!output_file)</p><p><b> {</b></p><p> cout<<"can't oen file!"<<endl;</p><p><b> return 1;</b></p><p><b>
76、}</b></p><p> output_file<<str<<endl;</p><p> output_file.close();</p><p> output_file.open("CodeFile.txt");</p><p> if(!output_file){&l
77、t;/p><p> cout<<"can't oen file!"<<endl;</p><p><b> return 1;</b></p><p><b> }</b></p><p> for(i=0;i<strlen(str);i
78、++){</p><p> for(j=0;j<=n;++j)</p><p><b> {</b></p><p> if(HT[j].ch==str[i])</p><p><b> {</b></p><p> output_file<<HC
79、[j];</p><p><b> break;</b></p><p><b> }</b></p><p><b> }</b></p><p><b> }</b></p><p> output_file.clos
80、e();</p><p> cout<<"\n";</p><p> cout<<"編碼完畢,并且已經(jīng)存入CodeFile.txt文件!\n";</p><p> input_file.open("CodeFile.txt"); //從CodeFile.txt中
81、讀入編碼,輸出在終端</p><p> if(!input_file)</p><p><b> {</b></p><p> cout<<"can't oen file!"<<endl;</p><p><b> return 1;</b>
82、;</p><p><b> }</b></p><p> input_file>>code;</p><p> cout<<"編碼碼值為:"<<code<<endl;</p><p> input_file.close();</p>
83、<p><b> }</b></p><p> else if(choice=='D'||choice=='d') //讀入CodeFile.txt中的編碼進行譯碼,將譯出來的字符放入Textfile.txt中</p><p><b> {</b></p><p>
84、; input_file.open("CodeFile.txt");</p><p> if(!input_file){</p><p> cout<<"can't oen file!"<<endl;</p><p><b> return 1;</b></p
85、><p><b> }</b></p><p> input_file>>h;</p><p> input_file.close();</p><p> output_file.open("Textfile.txt");</p><p> if(!outpu
86、t_file)</p><p><b> {</b></p><p> cout<<"can't oen file!"<<endl;</p><p><b> return 1;</b></p><p><b> }</b&
87、gt;</p><p><b> k=0;</b></p><p> while(h[k]!='\0') //先用編碼中的前幾個和字符的編碼相比較,然后往后移</p><p><b> {</b></p><p> for(i=1;i<=n;i++)
88、{</p><p><b> l=k;</b></p><p> for(j=0;j<strlen(HC[i]);j++,l++){</p><p> hl[j]=h[l];</p><p><b> }</b></p><p> hl[j]='\0&
89、#39;;</p><p> if(strcmp(HC[i],hl)==0)</p><p><b> {</b></p><p> output_file<<HT[i].ch;</p><p> k=k+strlen(HC[i]);</p><p><b> br
90、eak;</b></p><p><b> }</b></p><p><b> }</b></p><p><b> }</b></p><p> output_file.close();</p><p> input_file.
91、open("Textfile.txt");</p><p> if(!input_file){</p><p> cout<<"can't oen file!"<<endl;</p><p><b> return 1;</b></p><p>
92、;<b> }</b></p><p> input_file>>h; </p><p> cout<<h<<endl;</p><p> input_file.close();</p><p> cout<<"譯碼結束,字符已經(jīng)存入Textfile.t
93、xt文件中!"<<endl;</p><p><b> }</b></p><p> else if(choice=='Q'||choice=='q') //退出程序</p><p><b> { </b></p><p&
94、gt;<b> exit(0);</b></p><p><b> }</b></p><p> else //如果選了選項之外的就讓用戶重新選擇</p><p><b> {</b></p><p> cout<<"
95、您沒有輸入正確的步驟,請重新輸入!"<<endl;</p><p><b> }</b></p><p> cout<<endl;</p><p><b> }</b></p><p><b> return 0;</b></p&
96、gt;<p><b> }</b></p><p><b> 調(diào)試分析</b></p><p><b> 編碼</b></p><p><b> 、譯碼</b></p><p><b> 、退出</b><
97、/p><p><b> 實驗心得與體會</b></p><p> 在我自己課程設計中,就在編寫好源代碼后的調(diào)試中出現(xiàn)了不少的錯誤,遇到了很多麻煩及困難,我的調(diào)試及其中的錯誤和我最終找出錯誤,修改為正確的能夠執(zhí)行的程序中,通過分析,我學到了:</p><p> 在定義頭文件時可多不可少,即我們可多寫些頭文件,肯定不會出錯,但是若沒有定義所引用的
98、相關頭文件,必定調(diào)試不通過;</p><p> 在執(zhí)行譯碼操作時,不知什么原因,總是不能把要編譯的二進制數(shù)與編譯成的字符用連接號連接起來,而是按順序直接放在一起,視覺效果不是很好。還有就是,很遺憾的是,我們的哈夫曼編碼/譯碼器沒有像老師要求的那樣完成編一個文件的功能,這是我們設計的失敗之處。</p><p> 通過本次數(shù)據(jù)結構的課程設計,我學習了很多在上課沒懂的知識,并對求哈夫曼樹及哈
99、夫曼編碼/譯碼的算法有了更加深刻的了解,更鞏固了課堂中學習有關于哈夫曼編碼的知識,真正學會一種算法了。當求解一個算法時,不是拿到問題就不加思索地做,而是首先要先對它有個大概的了解,接著再詳細地分析每一步怎么做,無論自己以前是否有處理過相似的問題,只要按照以上的步驟,必定會順利地做出來。</p><p> 這次課程設計,我在編輯中犯了不應有的錯誤,設計統(tǒng)計字符和合并時忘記應該怎樣保存數(shù)據(jù),對文件的操作也很生疏。在
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 眾賞文庫僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 數(shù)據(jù)結構課程設計----哈夫曼編碼
- 數(shù)據(jù)結構課程設計哈夫曼編碼
- 數(shù)據(jù)結構課程設計--哈夫曼編碼
- 數(shù)據(jù)結構課程設計---哈夫曼編碼
- 數(shù)據(jù)結構課程設計哈夫曼編碼
- 數(shù)據(jù)結構 課程設計之哈夫曼編碼
- 數(shù)據(jù)結構課程設計--電文編碼譯碼(哈夫曼編碼)
- 數(shù)據(jù)結構課程設計電文編碼譯碼(哈夫曼編碼)
- 哈夫曼編碼譯碼數(shù)據(jù)結構課程設計
- 數(shù)據(jù)結構課程設計---哈夫曼編碼器
- 數(shù)據(jù)結構課程設計---哈夫曼編碼器
- 哈夫曼編碼譯碼數(shù)據(jù)結構課程設計
- 數(shù)據(jù)結構課程設計-哈夫曼編碼譯碼器
- 數(shù)據(jù)結構課程設計報告---哈夫曼編碼器
- 數(shù)據(jù)結構課程設計--哈夫曼編碼和譯碼報告
- 數(shù)據(jù)結構課程設計報告----哈夫曼
- 哈夫曼樹_數(shù)據(jù)結構課程設計
- 哈夫曼樹_數(shù)據(jù)結構課程設計
- 數(shù)據(jù)結構課程設計--哈夫曼編碼問題的設計和實現(xiàn)
- 應用數(shù)據(jù)結構課程設計---哈夫曼樹
評論
0/150
提交評論