數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)報(bào)告_第1頁(yè)
已閱讀1頁(yè),還剩15頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1、<p>  數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)報(bào)告</p><p>  ( 2011 -- 2012 年度第 學(xué)期)</p><p>  課程名稱: </p><p>  題 目: </p><p>  院 系: </p

2、><p>  班 級(jí): </p><p>  學(xué) 號(hào): </p><p>  姓 名: </p><p>  指導(dǎo)教師: </p><p>  設(shè)計(jì)周數(shù):

3、兩周 </p><p>  日期:2012 年 月 日</p><p><b>  目錄</b></p><p><b>  一.設(shè)計(jì)目的3</b></p><p><b>  二、需求分析3</b></p><p>  2.1選題的意

4、義及背景3</p><p>  2.2 輸入/輸出形式和輸出值的范圍4</p><p><b>  三.概要設(shè)計(jì)4</b></p><p><b>  3.1設(shè)計(jì)思想4</b></p><p>  3.2函數(shù)間的關(guān)系4</p><p><b>  四、詳細(xì)

5、設(shè)計(jì)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>  五.程序測(cè)試結(jié)果及問(wèn)題分析14</p><p>  5.1程序測(cè)試結(jié)果14</p><p>  5.2 問(wèn)題分析15</p><p><b>  六.總結(jié)15</b></p><p><b>  七.參考文獻(xiàn)16&

7、lt;/b></p><p><b>  一.設(shè)計(jì)目的</b></p><p>  數(shù)據(jù)結(jié)構(gòu)作為一門學(xué)科主要研究數(shù)據(jù)的各種邏輯結(jié)構(gòu)和存儲(chǔ)結(jié)構(gòu),以及對(duì)數(shù)據(jù)的各種操作。因此,主要有三個(gè)方面的內(nèi)容:數(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)是信息的一種組織方式,其目的是

8、為了提高算法的效率,它通常與一組算法的集合相對(duì)應(yīng),通過(guò)這組算法集合可以對(duì)數(shù)據(jù)結(jié)構(gòu)中的數(shù)據(jù)進(jìn)行某種操作。</p><p>  在當(dāng)今信息時(shí)代,信息技術(shù)己成為當(dāng)代知識(shí)經(jīng)濟(jì)的核心技術(shù)。我們時(shí)刻都在和數(shù)據(jù)打交道。比如人們?cè)谕獬龉ぷ鲿r(shí)找最短路徑,在銀行查詢存款、通過(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ù)。</p>&l

9、t;p>  數(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ī)硬件之間的一門計(jì)算機(jī)專業(yè)的核心課程,它是計(jì)算機(jī)程序設(shè)計(jì)、數(shù)據(jù)庫(kù)、操作系統(tǒng)、編譯原理及人工智能等的重要基礎(chǔ),廣泛的應(yīng)用于信息學(xué)、系統(tǒng)工程等各種領(lǐng)域。</p><p>  學(xué)習(xí)數(shù)據(jù)結(jié)構(gòu)是為了將實(shí)際問(wèn)題中所涉及的對(duì)象在計(jì)算機(jī)中表示出來(lái)并對(duì)它們進(jìn)行處理。通過(guò)課程設(shè)計(jì)

10、可以提高學(xué)生的思維能力,促進(jìn)學(xué)生的綜合應(yīng)用能力和專業(yè)素質(zhì)的提高。通過(guò)此次課程設(shè)計(jì)主要達(dá)到以下目的:</p><p>  了解并掌握數(shù)據(jù)結(jié)構(gòu)與算法的設(shè)計(jì)方法,具備初步的獨(dú)立分析和設(shè)計(jì)能力;</p><p>  初步掌握軟件開(kāi)發(fā)過(guò)程的問(wèn)題分析、系統(tǒng)設(shè)計(jì)、程序編碼、測(cè)試等基本方法和技能;</p><p>  提高綜合運(yùn)用所學(xué)的理論知識(shí)和方法獨(dú)立分析和解決問(wèn)題的能力;<

11、;/p><p>  訓(xùn)練用系統(tǒng)的觀點(diǎn)和軟件開(kāi)發(fā)一般規(guī)范進(jìn)行軟件開(kāi)發(fā),培養(yǎng)軟件工作者所應(yīng)具備的科學(xué)的工作方法和作風(fēng)。</p><p><b>  二、需求分析</b></p><p>  2.1選題的意義及背景</p><p>  鍛煉我們的編碼能力,真正理解數(shù)據(jù)結(jié)構(gòu)的編碼思想,并且鍛煉我們的動(dòng)手能力和成員間的配合,提高程序編

12、寫能力。</p><p>  在信息傳遞時(shí),希望長(zhǎng)度能盡可能短,即采用最短碼。赫夫曼編碼的應(yīng)用,就是采用這種有效的數(shù)據(jù)壓縮技術(shù)可以節(jié)省數(shù)據(jù)文件的存儲(chǔ)空間和計(jì)算機(jī)網(wǎng)絡(luò)的傳送時(shí)間。</p><p>  2.2 輸入/輸出形式和輸出值的范圍</p><p>  輸入信息以加載存檔的reading.txt文件為方式,加載不成功,提示出錯(cuò)信息,加載成功后,系統(tǒng)對(duì)其編碼,并按照

13、選擇對(duì)各種相關(guān)信息存檔。</p><p><b>  三.概要設(shè)計(jì)</b></p><p><b>  3.1設(shè)計(jì)思想</b></p><p>  哈夫曼樹(shù)用鄰接矩陣作為存儲(chǔ)結(jié)構(gòu),借助靜態(tài)鏈表來(lái)實(shí)現(xiàn)遍歷。 </p><p>  利用多重結(jié)構(gòu)體的形式設(shè)計(jì)出所需的變量類型,還有基本的文件讀寫知識(shí),同時(shí)借

14、助九大子函數(shù)結(jié)合一個(gè)主函數(shù)設(shè)計(jì)了此課程內(nèi)容,第一部分為信息的讀寫及統(tǒng)計(jì);第二部分為哈夫曼樹(shù)及其編碼的建立,再將編碼信息寫進(jìn)文件;第三部分為給信息加密在寫進(jìn)文件,再對(duì)其翻譯。最后的主函數(shù)是整個(gè)程序的組織者,利用switch選擇循環(huán)將九大子函數(shù)聯(lián)系起來(lái),畫龍點(diǎn)睛。這樣整個(gè)程序的基本流程就出來(lái)了,再根據(jù)此流出設(shè)計(jì)出源程序。 </p><p><b>  3.2函數(shù)間的關(guān)系</b></p>

15、;<p><b>  程序流程:</b></p><p><b>  三大模塊:</b></p><p><b>  四、詳細(xì)設(shè)計(jì)</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//定義哈夫曼樹(shù)中葉子結(jié)點(diǎn)個(gè)數(shù)</p><p>  typedef struct</p><p><b>  { </b></p><p>  char data;//字符值</p&

17、gt;<p>  int num;//某個(gè)值的字符出現(xiàn)的次數(shù)</p><p>  }TotalNode; //統(tǒng)計(jì)結(jié)點(diǎn),包括字符種類和出現(xiàn)次數(shù)</p><p>  typedef struct</p><p><b>  { </b></p><p>  TotalNode tot[300];//統(tǒng)計(jì)

18、結(jié)點(diǎn)數(shù)組</p><p>  int num;//統(tǒng)計(jì)數(shù)組中含有的字符個(gè)數(shù)</p><p>  }Total; //統(tǒng)計(jì)結(jié)構(gòu)體,包括統(tǒng)計(jì)數(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é)點(diǎn)在數(shù)組HuffNode[]中的序號(hào)</p><p>  int lchild;//左孩子結(jié)點(diǎn)在數(shù)組HuffNode[]中的序號(hào)</p><p>  int rchild;//右孩子結(jié)點(diǎn)在數(shù)組HuffNode[]中的序號(hào)</p><p>  }HNodetype; //哈夫曼樹(shù)結(jié)點(diǎn)類型,包括左右孩子,權(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)計(jì)信息中各字符的出現(xiàn)次數(shù)</p><p>  void HaffmanTree(Total *total,HNodetype HuffNode[]);</p><p><b&

25、gt;  //構(gòu)建哈夫曼樹(shù)</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>  //將已編碼信息翻譯過(guò)來(lái)并寫進(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//定義哈夫曼樹(shù)中葉子結(jié)點(diǎn)個(gè)數(shù)</p><p>  typedef struct</p><p><b>  { </b></p><p>  char data;//字符值</p>&l

30、t;p>  int num;//某個(gè)值的字符出現(xiàn)的次數(shù)</p><p>  }TotalNode; //統(tǒng)計(jì)結(jié)點(diǎn),包括字符種類和出現(xiàn)次數(shù)</p><p>  typedef struct</p><p><b>  { </b></p><p>  TotalNode tot[300];//統(tǒng)計(jì)結(jié)點(diǎn)數(shù)組<

31、;/p><p>  int num;//統(tǒng)計(jì)數(shù)組中含有的字符個(gè)數(shù)</p><p>  }Total; //統(tǒng)計(jì)結(jié)構(gòu)體,包括統(tǒng)計(jì)數(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é)點(diǎn)在數(shù)組HuffNode[]中的序號(hào)</p><p>  int lchild;//左孩子結(jié)點(diǎn)在數(shù)組HuffNode[]中的序號(hào)</p><p>  int rchild;//右孩子結(jié)點(diǎn)在數(shù)組HuffNode[]中的序號(hào)</p><p>  }HNodetype; //哈夫曼樹(shù)結(jié)點(diǎn)類型,包括左右孩子,權(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)計(jì)信息中各字符的次數(shù)</p><p>

37、  void HaffmanTree(Total *total,HNodetype HuffNode[]);//構(gòu)建哈夫曼樹(shù)</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);//將已編碼信息翻譯過(guò)來(lái)并寫進(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];//保存哈夫曼樹(shù)中各結(jié)點(diǎn)信息</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<<"請(qǐng)輸入操作代碼:";</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<<"請(qǐng)先從文件中讀取信息!"<<endl;</p><p><b>  else</b></p><p><b>  {</b></p><p>  total_m

49、essage(message,total);//統(tǒng)計(jì)信息中各字符的出現(xiàn)次數(shù)</p><p>  HaffmanTree(total,HuffNode);//構(gòu)建哈夫曼樹(shù)</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<<"請(qǐng)先從文件中讀取信息!"<<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<<"請(qǐng)先從文件中讀取信息!"<<endl;</p><p><b>  else</b></p><p&g

54、t;<b>  {</b></p><p>  total_message(message,total);//統(tǒng)計(jì)信息中各字符的出現(xiàn)次數(shù)</p><p>  HaffmanTree(total,HuffNode);//構(gòu)建哈夫曼樹(shù)</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)入不同的運(yùn)行界面,發(fā)揮各程序的功能:</p&g

56、t;<p>  //將編碼后的信息寫進(jìn)文件</p><p><b>  case 5:</b></p><p>  if(mark==0)cout<<"請(qǐng)先從文件中讀取信息!"<<endl;</p><p><b>  else</b></p><

57、;p><b>  {</b></p><p>  total_message(message,total);//統(tǒng)計(jì)信息中各字符的出現(xiàn)次數(shù)</p><p>  HaffmanTree(total,HuffNode);//構(gòu)建哈夫曼樹(shù)</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<<"請(qǐng)先從文件中讀取信息!"<<endl;</p><p><b>  else<

60、;/b></p><p><b>  {</b></p><p>  total_message(message,total);//統(tǒng)計(jì)信息中各字符的出現(xiàn)次數(shù)</p><p>  HaffmanTree(total,HuffNode);//構(gòu)建哈夫曼樹(shù)</p><p>  HaffmanCode(HuffNode,

61、HuffCode,total);//建立哈夫曼編碼</p><p>  writing_translate(locking,HuffCode,HuffNode,total);//將已編碼信息翻譯過(guò)來(lái)并寫進(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<<"輸入錯(cuò)誤,請(qǐng)重新選擇"<<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:此段程序功能:給文件信息加密編碼。通過(guò)調(diào)用哈夫曼樹(shù)的遍歷函數(shù)遍歷信息,創(chuàng)立一個(gè)備用數(shù)組locked,逐次遍歷搜

67、索信息對(duì)應(yīng)的編碼,一旦找到對(duì)應(yīng)的編碼便將該信息對(duì)應(yīng)的編碼寫進(jìn)locked數(shù)組,每加進(jìn)一個(gè)編碼便將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++)//搜索信息對(duì)應(yīng)的編碼</p><p><b>  {</b></p><p>  if(HuffNode[j].data==message->mes[i])//找到與信息對(duì)應(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)文件。通過(guò)文件的打開(kāi),若失敗返回打開(kāi)文件失敗,若成功便將已編碼信息寫進(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)//打開(kāi)失敗則結(jié)束</p><p><b>  {</b></p><p>  cout<<"打開(kāi)

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:此段程序功能:將已編碼入文件的信息翻譯過(guò)來(lái)并再次寫進(jìn)文件。先打開(kāi)文件,若失敗返回打開(kāi)文件失敗,若成功打開(kāi)則進(jìn)行數(shù)組初始化,從文件中查找從min開(kāi)始到ma

78、x的編碼對(duì)應(yīng)的信息,若對(duì)應(yīng)編碼比所給編碼短則不在比較,若找到對(duì)應(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);//打開(kāi)文件</p><p>  if(!outfile)//打開(kāi)失敗則結(jié)束</p

80、><p>  {cout<<"打開(kāi)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開(kāi)始到max的編碼對(duì)應(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;//對(duì)應(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++)//找到對(duì)應(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>  五.程序測(cè)試結(jié)果及問(wèn)題分析</p><p>  5.1程序測(cè)試結(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 問(wèn)題分析:</b></p><p>  在整個(gè)程序運(yùn)行中總是出現(xiàn)打開(kāi)head.h失敗,

95、開(kāi)始以為是機(jī)子問(wèn)題,等我們?cè)嚵撕芏嗯_(tái)機(jī)子還是出現(xiàn)同樣的問(wèn)題后,才發(fā)現(xiàn)將head.H文件跟原文件建在不同的工程里,系統(tǒng)無(wú)法在原文件中將head.h打開(kāi),并在代碼復(fù)制中有時(shí)會(huì)復(fù)制兩次導(dǎo)致很多代碼出現(xiàn)重復(fù)定義的錯(cuò)誤。還有時(shí)會(huì)忘了建一reading.text文件,導(dǎo)致程序運(yùn)行時(shí)老出現(xiàn)打開(kāi)文件失敗的錯(cuò)誤。知道這些錯(cuò)誤后經(jīng)過(guò)小組討論分析修正錯(cuò)誤,認(rèn)真仔細(xì)檢查每一步,最后也終于將程序完整運(yùn)行出來(lái)了。</p><p><b

96、>  六.總結(jié)</b></p><p>  在這兩個(gè)星期中,自己用vc++做了一個(gè)哈夫曼樹(shù)的應(yīng)用系統(tǒng),分別實(shí)現(xiàn)了系統(tǒng)的各大功能。在這次項(xiàng)目中,很用心去做,但是,在項(xiàng)目中也出現(xiàn)了很多的問(wèn)題,最大的問(wèn)題就是對(duì)程序設(shè)計(jì)框架結(jié)構(gòu)的不了解,在實(shí)現(xiàn)代碼與功能的連接時(shí)經(jīng)常會(huì)出現(xiàn)各種不同的錯(cuò)誤,在實(shí)現(xiàn)一些功能時(shí)系統(tǒng)常常會(huì)報(bào)錯(cuò)。許多錯(cuò)誤不知從哪修改,以致托了整個(gè)設(shè)計(jì)的后腿。課程設(shè)計(jì)中,既回顧了很多以前的東西,也發(fā)

97、現(xiàn)了很多的問(wèn)題,以前都沒(méi)遇見(jiàn)過(guò)的,收獲很大。</p><p>  通過(guò)本次數(shù)據(jù)結(jié)構(gòu)的課程設(shè)計(jì),我學(xué)習(xí)了很多在上課沒(méi)懂的知識(shí),并對(duì)求哈夫曼樹(shù)及哈夫曼編碼/譯碼的算法有了更加深刻的了解,更鞏固了課堂中學(xué)習(xí)有關(guān)于哈夫曼編碼的知識(shí), 此次哈夫曼樹(shù)的應(yīng)用系統(tǒng)的設(shè)計(jì)讓自己對(duì)數(shù)據(jù)結(jié)構(gòu)的了解更深入,可以把它同實(shí)際相結(jié)合,同時(shí),又讓我們學(xué)會(huì)了如何更好的從網(wǎng)上查找資料,還有同班上同學(xué)的交流。雖然我對(duì)數(shù)據(jù)結(jié)構(gòu)有了一定的掌握,但是到了真

98、正使用,做課設(shè)的時(shí)候還是遇到了許多的問(wèn)題。 在仔細(xì)研究過(guò)課設(shè)要求和功能需求后,我有了初步的想法。 在整個(gè)設(shè)計(jì)過(guò)程中,通過(guò)怎樣對(duì)把各個(gè)管理信息連接起來(lái)的分析,鍛煉了對(duì)事情的分析能力,通過(guò)怎樣解決過(guò)程中出現(xiàn)的問(wèn)題,提高了我們查找文獻(xiàn)的能力、對(duì)網(wǎng)絡(luò)資源的利用能力和和其他同學(xué)的交流溝通能力。而且,經(jīng)歷這次的課程設(shè)計(jì),也學(xué)會(huì)了自學(xué)和分工協(xié)作。編寫程序是件細(xì)心活,稍不留神就會(huì)出錯(cuò),這就必須要求我們對(duì)待事情要認(rèn)真!在編寫程序的過(guò)程中,錯(cuò)誤不斷出現(xiàn),不

99、同的類型(如少寫了一個(gè)符號(hào),寫錯(cuò)了字母,用錯(cuò)了函數(shù)等等)層出不窮,這考驗(yàn)我們待事細(xì)心,耐心,能不能堅(jiān)持到底,不能半途而廢。</p><p>  每一次的課程設(shè)計(jì),都是讓我們對(duì)原有的知識(shí)從了解表面到深入本質(zhì),從個(gè)體學(xué)習(xí)到整體把握的跳躍,對(duì)新知識(shí)的汲取,更是把課本的知識(shí)應(yīng)用到實(shí)際中,讓我們了解了我們的學(xué)習(xí)有什么用,能夠解決什么樣的問(wèn)題,增加了自信和學(xué)習(xí)的動(dòng)力。</p><p>  總之,通過(guò)這

100、次的課程設(shè)計(jì),我們收獲匪淺首先由衷感謝老師提供這樣一個(gè)鍛煉自己的機(jī)會(huì),感受到學(xué)來(lái)的知識(shí)不只是用來(lái)完成試卷的。一向慣于獨(dú)立思考的自己學(xué)會(huì)了積極的同同學(xué)、朋友交流,取長(zhǎng)補(bǔ)短,共同進(jìn)步。課程設(shè)計(jì)使自己發(fā)現(xiàn)考試并不是最重要,最重要的是能運(yùn)用所學(xué)的知識(shí)。在整個(gè)課程設(shè)計(jì)的學(xué)習(xí)過(guò)程中,不再是用學(xué)到的知識(shí)解題,而是在實(shí)際運(yùn)用時(shí)遇到什么學(xué)什么,重在把知識(shí)應(yīng)用于實(shí)際。</p><p><b>  七.參考文獻(xiàn)</b&

溫馨提示

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

最新文檔

評(píng)論

0/150

提交評(píng)論