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

下載本文檔

版權(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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論