版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
1、<p> 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計報告</p><p> ( 2011 -- 2012 年度第 學(xué)期)</p><p> 課程名稱: </p><p> 題 目: </p><p> 院 系: </p
2、><p> 班 級: </p><p> 學(xué) 號: </p><p> 姓 名: </p><p> 指導(dǎo)教師: </p><p> 設(shè)計周數(shù):
3、兩周 </p><p> 日期:2012 年 月 日</p><p><b> 目錄</b></p><p><b> 一.設(shè)計目的3</b></p><p><b> 二、需求分析3</b></p><p> 2.1選題的意
4、義及背景3</p><p> 2.2 輸入/輸出形式和輸出值的范圍4</p><p><b> 三.概要設(shè)計4</b></p><p><b> 3.1設(shè)計思想4</b></p><p> 3.2函數(shù)間的關(guān)系4</p><p><b> 四、詳細(xì)
5、設(shè)計5</b></p><p> 4.1哈夫曼的主要結(jié)構(gòu)5</p><p> 4.1.1結(jié)構(gòu)定義5</p><p> 4.1.2主要函數(shù)聲明及功能描述6</p><p><b> 4.2源程序7</b></p><p> 4.2.1頭文件7</p>
6、<p> 4.2.2源文件8</p><p> 五.程序測試結(jié)果及問題分析14</p><p> 5.1程序測試結(jié)果14</p><p> 5.2 問題分析15</p><p><b> 六.總結(jié)15</b></p><p><b> 七.參考文獻(xiàn)16&
7、lt;/b></p><p><b> 一.設(shè)計目的</b></p><p> 數(shù)據(jù)結(jié)構(gòu)作為一門學(xué)科主要研究數(shù)據(jù)的各種邏輯結(jié)構(gòu)和存儲結(jié)構(gòu),以及對數(shù)據(jù)的各種操作。因此,主要有三個方面的內(nèi)容:數(shù)據(jù)的邏輯結(jié)構(gòu);數(shù)據(jù)的物理存儲結(jié)構(gòu);對數(shù)據(jù)的操作(或算法)。通常,算法的設(shè)計取決于數(shù)據(jù)的邏輯結(jié)構(gòu),算法的實現(xiàn)取決于數(shù)據(jù)的物理存儲結(jié)構(gòu)。數(shù)據(jù)結(jié)構(gòu)是信息的一種組織方式,其目的是
8、為了提高算法的效率,它通常與一組算法的集合相對應(yīng),通過這組算法集合可以對數(shù)據(jù)結(jié)構(gòu)中的數(shù)據(jù)進(jìn)行某種操作。</p><p> 在當(dāng)今信息時代,信息技術(shù)己成為當(dāng)代知識經(jīng)濟(jì)的核心技術(shù)。我們時刻都在和數(shù)據(jù)打交道。比如人們在外出工作時找最短路徑,在銀行查詢存款、通過互聯(lián)網(wǎng)查新聞、以及遠(yuǎn)程教育報名等,所有這些都在與數(shù)據(jù)發(fā)生關(guān)系。實際上,現(xiàn)實世界中的實體經(jīng)過抽象以后,就可以成為計算機(jī)上所處理的數(shù)據(jù)。</p>&l
9、t;p> 數(shù)據(jù)結(jié)構(gòu)課程主要是研究非數(shù)值計算的程序設(shè)計問題中所出現(xiàn)的計算機(jī)操作對象以及它們之間的關(guān)系和操作的學(xué)科。數(shù)據(jù)結(jié)構(gòu)是介于數(shù)學(xué)、計算機(jī)軟件和計算機(jī)硬件之間的一門計算機(jī)專業(yè)的核心課程,它是計算機(jī)程序設(shè)計、數(shù)據(jù)庫、操作系統(tǒng)、編譯原理及人工智能等的重要基礎(chǔ),廣泛的應(yīng)用于信息學(xué)、系統(tǒng)工程等各種領(lǐng)域。</p><p> 學(xué)習(xí)數(shù)據(jù)結(jié)構(gòu)是為了將實際問題中所涉及的對象在計算機(jī)中表示出來并對它們進(jìn)行處理。通過課程設(shè)計
10、可以提高學(xué)生的思維能力,促進(jìn)學(xué)生的綜合應(yīng)用能力和專業(yè)素質(zhì)的提高。通過此次課程設(shè)計主要達(dá)到以下目的:</p><p> 了解并掌握數(shù)據(jù)結(jié)構(gòu)與算法的設(shè)計方法,具備初步的獨立分析和設(shè)計能力;</p><p> 初步掌握軟件開發(fā)過程的問題分析、系統(tǒng)設(shè)計、程序編碼、測試等基本方法和技能;</p><p> 提高綜合運用所學(xué)的理論知識和方法獨立分析和解決問題的能力;<
11、;/p><p> 訓(xùn)練用系統(tǒng)的觀點和軟件開發(fā)一般規(guī)范進(jìn)行軟件開發(fā),培養(yǎng)軟件工作者所應(yīng)具備的科學(xué)的工作方法和作風(fēng)。</p><p><b> 二、需求分析</b></p><p> 2.1選題的意義及背景</p><p> 鍛煉我們的編碼能力,真正理解數(shù)據(jù)結(jié)構(gòu)的編碼思想,并且鍛煉我們的動手能力和成員間的配合,提高程序編
12、寫能力。</p><p> 在信息傳遞時,希望長度能盡可能短,即采用最短碼。赫夫曼編碼的應(yīng)用,就是采用這種有效的數(shù)據(jù)壓縮技術(shù)可以節(jié)省數(shù)據(jù)文件的存儲空間和計算機(jī)網(wǎng)絡(luò)的傳送時間。</p><p> 2.2 輸入/輸出形式和輸出值的范圍</p><p> 輸入信息以加載存檔的reading.txt文件為方式,加載不成功,提示出錯信息,加載成功后,系統(tǒng)對其編碼,并按照
13、選擇對各種相關(guān)信息存檔。</p><p><b> 三.概要設(shè)計</b></p><p><b> 3.1設(shè)計思想</b></p><p> 哈夫曼樹用鄰接矩陣作為存儲結(jié)構(gòu),借助靜態(tài)鏈表來實現(xiàn)遍歷。 </p><p> 利用多重結(jié)構(gòu)體的形式設(shè)計出所需的變量類型,還有基本的文件讀寫知識,同時借
14、助九大子函數(shù)結(jié)合一個主函數(shù)設(shè)計了此課程內(nèi)容,第一部分為信息的讀寫及統(tǒng)計;第二部分為哈夫曼樹及其編碼的建立,再將編碼信息寫進(jìn)文件;第三部分為給信息加密在寫進(jìn)文件,再對其翻譯。最后的主函數(shù)是整個程序的組織者,利用switch選擇循環(huán)將九大子函數(shù)聯(lián)系起來,畫龍點睛。這樣整個程序的基本流程就出來了,再根據(jù)此流出設(shè)計出源程序。 </p><p><b> 3.2函數(shù)間的關(guān)系</b></p>
15、;<p><b> 程序流程:</b></p><p><b> 三大模塊:</b></p><p><b> 四、詳細(xì)設(shè)計</b></p><p> 4.1哈夫曼的主要結(jié)構(gòu) </p><p> 4.1.1結(jié)構(gòu)定義:</p><p&
16、gt; #define MAXVALUE 1000//定義最大權(quán)值</p><p> #define MAXBIT 100//定義哈夫曼樹中葉子結(jié)點個數(shù)</p><p> typedef struct</p><p><b> { </b></p><p> char data;//字符值</p&
17、gt;<p> int num;//某個值的字符出現(xiàn)的次數(shù)</p><p> }TotalNode; //統(tǒng)計結(jié)點,包括字符種類和出現(xiàn)次數(shù)</p><p> typedef struct</p><p><b> { </b></p><p> TotalNode tot[300];//統(tǒng)計
18、結(jié)點數(shù)組</p><p> int num;//統(tǒng)計數(shù)組中含有的字符個數(shù)</p><p> }Total; //統(tǒng)計結(jié)構(gòu)體,包括統(tǒng)計數(shù)組和字符種類數(shù)</p><p> typedef struct</p><p><b> { </b></p><p> char mes[300
19、];//字符數(shù)組</p><p> int num;//總字符數(shù)</p><p> }Message; //信息結(jié)構(gòu)體,包括字符數(shù)組和總字符數(shù)</p><p> typedef struct{</p><p> int locked[500];//密碼數(shù)組</p><p> int num;//密碼總數(shù)<
20、;/p><p> }Locking; //哈夫曼編碼后的密文信息</p><p> typedef struct</p><p><b> { </b></p><p> char data;//字符</p><p> int weight;//權(quán)值</p><p
21、> int parent;//雙親結(jié)點在數(shù)組HuffNode[]中的序號</p><p> int lchild;//左孩子結(jié)點在數(shù)組HuffNode[]中的序號</p><p> int rchild;//右孩子結(jié)點在數(shù)組HuffNode[]中的序號</p><p> }HNodetype; //哈夫曼樹結(jié)點類型,包括左右孩子,權(quán)值和信息</p
22、><p> typedef struct</p><p><b> { </b></p><p> int bit[MAXBIT];</p><p> int start;</p><p> }HCodetype; //哈夫曼編碼結(jié)構(gòu)體,包括編碼數(shù)組和起始位</p><p
23、> 4.1.2主要函數(shù)聲明及功能描述如下:</p><p> void reading_file(Message *message);</p><p> //從文件中讀取信息</p><p> void writing_file(Message *message);</p><p><b> //將信息寫進(jìn)文件<
24、;/b></p><p> void total_message(Message *message,Total *total);</p><p> //統(tǒng)計信息中各字符的出現(xiàn)次數(shù)</p><p> void HaffmanTree(Total *total,HNodetype HuffNode[]);</p><p><b&
25、gt; //構(gòu)建哈夫曼樹</b></p><p> void HaffmanCode(HNodetype HuffNode[],HCodetype HuffCode[],Total *total);</p><p><b> //建立哈夫曼編碼</b></p><p> void writing_HCode(HNodetyp
26、e HuffNode[],HCodetype HuffCode[],Total *total);</p><p> //將編碼規(guī)則寫進(jìn)文件</p><p> 文件信息的加密,文件的寫入,將編碼后的信息寫進(jìn)文件各程序的聲明如下:</p><p> void lock(Message *message,HNodetype HuffNode[],HCodetype
27、HuffCode[],Total *total,Locking *locking);</p><p> //給文件信息加密編碼</p><p> void writing_lock(Locking *locking);</p><p> //將已編碼信息寫進(jìn)文件</p><p> void writing_translate(Lock
28、ing *locking,HCodetype HuffCode[],HNodetype HuffNode[],Total *total);</p><p> //將已編碼信息翻譯過來并寫進(jìn)文件</p><p><b> 4.2源程序 </b></p><p> 4.2.1頭文件head.h</p><p> #d
29、efine MAXVALUE 1000//定義最大權(quán)值</p><p> #define MAXBIT 100//定義哈夫曼樹中葉子結(jié)點個數(shù)</p><p> typedef struct</p><p><b> { </b></p><p> char data;//字符值</p>&l
30、t;p> int num;//某個值的字符出現(xiàn)的次數(shù)</p><p> }TotalNode; //統(tǒng)計結(jié)點,包括字符種類和出現(xiàn)次數(shù)</p><p> typedef struct</p><p><b> { </b></p><p> TotalNode tot[300];//統(tǒng)計結(jié)點數(shù)組<
31、;/p><p> int num;//統(tǒng)計數(shù)組中含有的字符個數(shù)</p><p> }Total; //統(tǒng)計結(jié)構(gòu)體,包括統(tǒng)計數(shù)組和字符種類數(shù)</p><p> typedef struct</p><p><b> { </b></p><p> char mes[300];//字符數(shù)
32、組</p><p> int num;//總字符數(shù)</p><p> }Message; //信息結(jié)構(gòu)體,包括字符數(shù)組和總字符數(shù)</p><p> typedef struct{</p><p> int locked[500];//密碼數(shù)組</p><p> int num;//密碼總數(shù)</p>
33、<p> }Locking; //哈夫曼編碼后的密文信息</p><p> typedef struct</p><p><b> { </b></p><p> char data;//字符</p><p> int weight;//權(quán)值</p><p> i
34、nt parent;//雙親結(jié)點在數(shù)組HuffNode[]中的序號</p><p> int lchild;//左孩子結(jié)點在數(shù)組HuffNode[]中的序號</p><p> int rchild;//右孩子結(jié)點在數(shù)組HuffNode[]中的序號</p><p> }HNodetype; //哈夫曼樹結(jié)點類型,包括左右孩子,權(quán)值和信息</p>&
35、lt;p> typedef struct</p><p><b> { </b></p><p> int bit[MAXBIT];</p><p> int start;</p><p> }HCodetype; //哈夫曼編碼結(jié)構(gòu)體,包括編碼數(shù)組和起始位</p><p> v
36、oid reading_file(Message *message);//從文件中讀取信息</p><p> void writing_file(Message *message);//將信息寫進(jìn)文件</p><p> void total_message(Message *message,Total *total);//統(tǒng)計信息中各字符的次數(shù)</p><p>
37、 void HaffmanTree(Total *total,HNodetype HuffNode[]);//構(gòu)建哈夫曼樹</p><p> void HaffmanCode(HNodetype HuffNode[],HCodetype HuffCode[],Total *total);//建立哈夫曼編碼</p><p> void writing_HCode(HNodetype H
38、uffNode[],HCodetype HuffCode[],Total *total);//將編碼規(guī)則寫進(jìn)文件</p><p> void lock(Message *message,HNodetype HuffNode[],HCodetype HuffCode[],Total *total,Locking *locking);//給文件信息加密編碼</p><p> void wr
39、iting_lock(Locking *locking);//將已編碼信息寫進(jìn)文件</p><p> void writing_translate(Locking *locking,HCodetype HuffCode[],HNodetype HuffNode[],Total *total);//將已編碼信息翻譯過來并寫進(jìn)文件</p><p> 4.2.2源文件source.cpp&l
40、t;/p><p> #include"head.h"</p><p> #include<iostream></p><p> #include<fstream></p><p> using namespace std;</p><p> int main()<
41、/p><p><b> {</b></p><p> int i,j,choice,mark=0;//mark標(biāo)記文件信息是否讀入到內(nèi)存中</p><p> HNodetype HuffNode[500];//保存哈夫曼樹中各結(jié)點信息</p><p> HCodetype HuffCode[300];</p&g
42、t;<p> Locking *locking;</p><p> Total *total;</p><p> Message *message;</p><p> locking=new Locking;</p><p> locking->num=0;</p><p> total
43、=new Total;</p><p> total->num=0;</p><p> message=new Message;</p><p> message->num=0; //初始化變量</p><p><b> while(1)</b></p><p><b&g
44、t; {</b></p><p> cout<<"********************************************************************************";</p><p> cout<<"*1:從文件讀取信息 2:顯示編碼規(guī)則 3:
45、將原文件信息寫進(jìn)文件 *";</p><p> cout<<"*4:將編碼規(guī)則寫進(jìn)文件 5:將編碼后的信息寫進(jìn)文件 6:將譯碼后的信息寫進(jìn)文件 7:退出 *";</p><p> cout<<"********************************************************
46、************************"<<endl;</p><p> cout<<"請輸入操作代碼:";</p><p> cin>>choice;</p><p> switch(choice)</p><p><b> {</b>
47、</p><p><b> case 1:</b></p><p> reading_file(message);//從文件中讀取信息</p><p><b> mark=1;</b></p><p><b> break;</b></p><p&g
48、t; case 2://顯示編碼規(guī)則</p><p> if(mark==0)cout<<"請先從文件中讀取信息!"<<endl;</p><p><b> else</b></p><p><b> {</b></p><p> total_m
49、essage(message,total);//統(tǒng)計信息中各字符的出現(xiàn)次數(shù)</p><p> HaffmanTree(total,HuffNode);//構(gòu)建哈夫曼樹</p><p> HaffmanCode(HuffNode,HuffCode,total);//建立哈夫曼編碼</p><p> for(i=0;i<total->num;i++)/
50、/顯示編碼規(guī)則</p><p><b> { </b></p><p> cout<<total->tot[i].data<<" ";</p><p> for(j=HuffCode[i].start+1;j<total->num;j++)</p><
51、p> cout<<HuffCode[i].bit[j];</p><p> cout<<endl;</p><p><b> }</b></p><p><b> }</b></p><p> break; </p><p>
52、; case 3://將原文件信息寫進(jìn)文件</p><p> if(mark==0)cout<<"請先從文件中讀取信息!"<<endl;</p><p><b> else</b></p><p> writing_file(message);//將信息寫進(jìn)文件</p><
53、p><b> break;</b></p><p> case 4://將編碼規(guī)則寫進(jìn)文件</p><p> if(mark==0)cout<<"請先從文件中讀取信息!"<<endl;</p><p><b> else</b></p><p&g
54、t;<b> {</b></p><p> total_message(message,total);//統(tǒng)計信息中各字符的出現(xiàn)次數(shù)</p><p> HaffmanTree(total,HuffNode);//構(gòu)建哈夫曼樹</p><p> HaffmanCode(HuffNode,HuffCode,total);//建立哈夫曼編碼&
55、lt;/p><p> writing_HCode(HuffNode,HuffCode,total);//將編碼規(guī)則寫進(jìn)文件</p><p><b> }</b></p><p><b> break;</b></p><p> 根據(jù)選擇的不同進(jìn)入不同的運行界面,發(fā)揮各程序的功能:</p&g
56、t;<p> //將編碼后的信息寫進(jìn)文件</p><p><b> case 5:</b></p><p> if(mark==0)cout<<"請先從文件中讀取信息!"<<endl;</p><p><b> else</b></p><
57、;p><b> {</b></p><p> total_message(message,total);//統(tǒng)計信息中各字符的出現(xiàn)次數(shù)</p><p> HaffmanTree(total,HuffNode);//構(gòu)建哈夫曼樹</p><p> HaffmanCode(HuffNode,HuffCode,total);//建立哈夫
58、曼編碼</p><p> lock(message,HuffNode,HuffCode,total,locking);//給文件信息加密編碼</p><p> writing_lock(locking);//將已編碼信息寫進(jìn)文件</p><p><b> }</b></p><p><b> break
59、;</b></p><p> //將譯碼后的信息寫進(jìn)文件 </p><p><b> case 6:</b></p><p> if(mark==0)cout<<"請先從文件中讀取信息!"<<endl;</p><p><b> else<
60、;/b></p><p><b> {</b></p><p> total_message(message,total);//統(tǒng)計信息中各字符的出現(xiàn)次數(shù)</p><p> HaffmanTree(total,HuffNode);//構(gòu)建哈夫曼樹</p><p> HaffmanCode(HuffNode,
61、HuffCode,total);//建立哈夫曼編碼</p><p> writing_translate(locking,HuffCode,HuffNode,total);//將已編碼信息翻譯過來并寫進(jìn)文件</p><p><b> }</b></p><p><b> break;</b></p>&
62、lt;p><b> case 7:</b></p><p><b> exit(1);</b></p><p><b> default:</b></p><p> cout<<"輸入錯誤,請重新選擇"<<endl;</p>&l
63、t;p><b> }</b></p><p><b> }</b></p><p> for(i=0;i<locking->num;i++)</p><p> if(locking->locked[i]==-1)cout<<" ";</p>&l
64、t;p><b> else</b></p><p> cout<<locking->locked[i]; </p><p> cout<<endl;</p><p> for(i=0;i<total->num;i++)</p><p> cout<<t
65、otal->tot[i].data<<" "<<total->tot[i].num<<endl;</p><p> for(i=0;i<2*(total->num)-1;i++)</p><p> cout<<HuffNode[i].parent<<" ";<
66、;/p><p> cout<<endl; </p><p><b> return 0;</b></p><p><b> }</b></p><p> 注釋1:此段程序功能:給文件信息加密編碼。通過調(diào)用哈夫曼樹的遍歷函數(shù)遍歷信息,創(chuàng)立一個備用數(shù)組locked,逐次遍歷搜
67、索信息對應(yīng)的編碼,一旦找到對應(yīng)的編碼便將該信息對應(yīng)的編碼寫進(jìn)locked數(shù)組,每加進(jìn)一個編碼便將locked數(shù)組總數(shù)加1。</p><p> void lock(Message *message,HNodetype HuffNode[],HCodetype HuffCode[],Total *total,Locking *locking)</p><p><b> {<
68、/b></p><p> int i,j,m;</p><p> for(i=0;i<message->num;i++)//遍歷信息</p><p><b> {</b></p><p> if(message->mes[i]==' ')//碰到空格則以-1形式保存進(jìn)loc
69、ked數(shù)組中</p><p><b> {</b></p><p> locking->locked[locking->num]=-1;</p><p> locking->num++;</p><p><b> }</b></p><p><
70、b> else</b></p><p> for(j=0;j<total->num;j++)//搜索信息對應(yīng)的編碼</p><p><b> {</b></p><p> if(HuffNode[j].data==message->mes[i])//找到與信息對應(yīng)的編碼則寫進(jìn)locked數(shù)組</
71、p><p> for(m=HuffCode[j].start+1;m<total->num;m++)</p><p><b> {</b></p><p> locking->locked[locking->num]=HuffCode[j].bit[m];</p><p> locking-&
72、gt;num++;//locked數(shù)組總數(shù)加1</p><p><b> }</b></p><p><b> }</b></p><p><b> }</b></p><p><b> }</b></p><p> 注釋
73、2:此段程序功能:將哈夫曼編碼后的密文信息寫進(jìn)文件。通過文件的打開,若失敗返回打開文件失敗,若成功便將已編碼信息寫進(jìn)文件,返回已編碼信息寫進(jìn)文件成功。</p><p> void writing_lock(Locking *locking)</p><p><b> {</b></p><p><b> int i;</b
74、></p><p> ofstream outfile("c:\\locking.txt",ios::in|ios::out);</p><p> if(!outfile)//打開失敗則結(jié)束</p><p><b> {</b></p><p> cout<<"打開
75、c:\\locking.txt文件失敗"<<endl;</p><p><b> exit(1);</b></p><p><b> }</b></p><p> for(i=0;i<locking->num;i++)//寫文件</p><p> if(lo
76、cking->locked[i]==-1)</p><p> outfile.put(' ');</p><p><b> else</b></p><p> outfile<<locking->locked[i];</p><p> cout<<"已
77、編碼信息寫進(jìn)文件成功"<<endl;</p><p> outfile.close();//關(guān)閉文件</p><p><b> }</b></p><p> 注釋3:此段程序功能:將已編碼入文件的信息翻譯過來并再次寫進(jìn)文件。先打開文件,若失敗返回打開文件失敗,若成功打開則進(jìn)行數(shù)組初始化,從文件中查找從min開始到ma
78、x的編碼對應(yīng)的信息,若對應(yīng)編碼比所給編碼短則不在比較,若找到對應(yīng)信息,則寫進(jìn)文件。然后再次進(jìn)行數(shù)組初始化將翻譯信息寫進(jìn)文件并返回翻譯信息寫進(jìn)文件成功。</p><p> void writing_translate(Locking *locking,HCodetype HuffCode[],HNodetype HuffNode[],Total *total)</p><p><b&
79、gt; {</b></p><p> int i,j,mark[100],start[100],min,max;</p><p> ofstream outfile("c:\\translate.txt",ios::in|ios::out);//打開文件</p><p> if(!outfile)//打開失敗則結(jié)束</p
80、><p> {cout<<"打開c:\\translate.txt文件失敗"<<endl;</p><p><b> exit(1);</b></p><p><b> }</b></p><p> for(i=0;i<total->num
81、;i++)//start數(shù)組初始化</p><p><b> {</b></p><p> start[i]=HuffCode[i].start+1;</p><p><b> }</b></p><p> for(i=0;i<total->num;i++)//mark數(shù)組初始化
82、</p><p><b> {</b></p><p> mark[i]=1;</p><p><b> }</b></p><p><b> min=0;</b></p><p> for(max=0;max<locking->n
83、um;max++)//寫文件</p><p><b> {</b></p><p> if(locking->locked[max]==-1)//碰到空格信息則直接輸出空格</p><p><b> {</b></p><p> outfile.put(' ');<
84、;/p><p><b> min++;</b></p><p><b> }</b></p><p><b> else</b></p><p><b> {</b></p><p> for(i=min;i<=max;
85、i++)//查找從min開始到max的編碼對應(yīng)的信息</p><p><b> {</b></p><p> for(j=0;j<total->num;j++) { </p><p> if(start[j]==total->num+1)</p>&
86、lt;p> mark[j]=0;//對應(yīng)編碼比所給編碼短則不在比較</p><p> if(mark[j]==1&&locking->locked[i]==HuffCode[j].bit[start[j]])</p><p> start[j]++;</p><p><b> else</b></p&g
87、t;<p> mark[j]=0;</p><p><b> }</b></p><p><b> }</b></p><p> for(i=0;i<total->num;i++)//找到對應(yīng)信息,則寫進(jìn)文件</p><p><b> {</b&g
88、t;</p><p> if(mark[i]==1&&start[i]==total->num)</p><p><b> {</b></p><p> outfile.put(HuffNode[i].data);</p><p><b> break;</b><
89、/p><p><b> }</b></p><p><b> }</b></p><p> if(i!=total->num)</p><p> min=max+1;</p><p> for(i=0;i<total->num;i++)//start數(shù)
90、組初始化</p><p><b> {</b></p><p> start[i]=HuffCode[i].start+1;</p><p><b> }</b></p><p> for(i=0;i<total->num;i++)//mark數(shù)組初始化</p>&
91、lt;p><b> {</b></p><p> mark[i]=1;</p><p><b> }</b></p><p><b> }</b></p><p><b> }</b></p><p> cout&
92、lt;<"翻譯信息寫進(jìn)文件成功"<<endl;</p><p> outfile.close();//關(guān)閉文件</p><p><b> }</b></p><p> 五.程序測試結(jié)果及問題分析</p><p> 5.1程序測試結(jié)果:</p><p>
93、 圖1存放原信息的文檔reading.txt截圖</p><p> 選擇“將編碼后的信息寫進(jìn)文件”,則將編碼后的信息寫進(jìn)locking.txt中。如圖2和3所示:</p><p> 圖2 將編碼后的信息寫入文件截圖</p><p> 圖3 存放編碼后的信息文檔locking.txt截圖</p><p> 選擇“將譯碼后的信息寫進(jìn)文件
94、”,則將譯碼后的信息寫進(jìn)translate.txt中。如圖4和5所示:</p><p> 圖4將譯碼后的信息寫進(jìn)文件截圖</p><p> 圖5存放譯碼后的信息文檔translate.txt截圖</p><p><b> 5.2 問題分析:</b></p><p> 在整個程序運行中總是出現(xiàn)打開head.h失敗,
95、開始以為是機(jī)子問題,等我們試了很多臺機(jī)子還是出現(xiàn)同樣的問題后,才發(fā)現(xiàn)將head.H文件跟原文件建在不同的工程里,系統(tǒng)無法在原文件中將head.h打開,并在代碼復(fù)制中有時會復(fù)制兩次導(dǎo)致很多代碼出現(xiàn)重復(fù)定義的錯誤。還有時會忘了建一reading.text文件,導(dǎo)致程序運行時老出現(xiàn)打開文件失敗的錯誤。知道這些錯誤后經(jīng)過小組討論分析修正錯誤,認(rèn)真仔細(xì)檢查每一步,最后也終于將程序完整運行出來了。</p><p><b
96、> 六.總結(jié)</b></p><p> 在這兩個星期中,自己用vc++做了一個哈夫曼樹的應(yīng)用系統(tǒng),分別實現(xiàn)了系統(tǒng)的各大功能。在這次項目中,很用心去做,但是,在項目中也出現(xiàn)了很多的問題,最大的問題就是對程序設(shè)計框架結(jié)構(gòu)的不了解,在實現(xiàn)代碼與功能的連接時經(jīng)常會出現(xiàn)各種不同的錯誤,在實現(xiàn)一些功能時系統(tǒng)常常會報錯。許多錯誤不知從哪修改,以致托了整個設(shè)計的后腿。課程設(shè)計中,既回顧了很多以前的東西,也發(fā)
97、現(xiàn)了很多的問題,以前都沒遇見過的,收獲很大。</p><p> 通過本次數(shù)據(jù)結(jié)構(gòu)的課程設(shè)計,我學(xué)習(xí)了很多在上課沒懂的知識,并對求哈夫曼樹及哈夫曼編碼/譯碼的算法有了更加深刻的了解,更鞏固了課堂中學(xué)習(xí)有關(guān)于哈夫曼編碼的知識, 此次哈夫曼樹的應(yīng)用系統(tǒng)的設(shè)計讓自己對數(shù)據(jù)結(jié)構(gòu)的了解更深入,可以把它同實際相結(jié)合,同時,又讓我們學(xué)會了如何更好的從網(wǎng)上查找資料,還有同班上同學(xué)的交流。雖然我對數(shù)據(jù)結(jié)構(gòu)有了一定的掌握,但是到了真
98、正使用,做課設(shè)的時候還是遇到了許多的問題。 在仔細(xì)研究過課設(shè)要求和功能需求后,我有了初步的想法。 在整個設(shè)計過程中,通過怎樣對把各個管理信息連接起來的分析,鍛煉了對事情的分析能力,通過怎樣解決過程中出現(xiàn)的問題,提高了我們查找文獻(xiàn)的能力、對網(wǎng)絡(luò)資源的利用能力和和其他同學(xué)的交流溝通能力。而且,經(jīng)歷這次的課程設(shè)計,也學(xué)會了自學(xué)和分工協(xié)作。編寫程序是件細(xì)心活,稍不留神就會出錯,這就必須要求我們對待事情要認(rèn)真!在編寫程序的過程中,錯誤不斷出現(xiàn),不
99、同的類型(如少寫了一個符號,寫錯了字母,用錯了函數(shù)等等)層出不窮,這考驗我們待事細(xì)心,耐心,能不能堅持到底,不能半途而廢。</p><p> 每一次的課程設(shè)計,都是讓我們對原有的知識從了解表面到深入本質(zhì),從個體學(xué)習(xí)到整體把握的跳躍,對新知識的汲取,更是把課本的知識應(yīng)用到實際中,讓我們了解了我們的學(xué)習(xí)有什么用,能夠解決什么樣的問題,增加了自信和學(xué)習(xí)的動力。</p><p> 總之,通過這
100、次的課程設(shè)計,我們收獲匪淺首先由衷感謝老師提供這樣一個鍛煉自己的機(jī)會,感受到學(xué)來的知識不只是用來完成試卷的。一向慣于獨立思考的自己學(xué)會了積極的同同學(xué)、朋友交流,取長補(bǔ)短,共同進(jìn)步。課程設(shè)計使自己發(fā)現(xiàn)考試并不是最重要,最重要的是能運用所學(xué)的知識。在整個課程設(shè)計的學(xué)習(xí)過程中,不再是用學(xué)到的知識解題,而是在實際運用時遇到什么學(xué)什么,重在把知識應(yīng)用于實際。</p><p><b> 七.參考文獻(xiàn)</b&
溫馨提示
- 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. 眾賞文庫僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計報告
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計報告
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計報告
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計報告
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計報告
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計報告
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計報告
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計報告
- 《數(shù)據(jù)結(jié)構(gòu)》課程設(shè)計報告
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計報告
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計--數(shù)據(jù)結(jié)構(gòu)課程設(shè)計----huffman編碼
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計——課程設(shè)計報告模板
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計報告 (2)
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計報告 (4)
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計實習(xí)報告
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計報告.doc
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計報告 (3)
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計報告 (2)
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計報告 (2)
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計報告--鏈表
評論
0/150
提交評論