赫夫曼編譯碼器的實現(xiàn)數(shù)據(jù)結(jié)構(gòu)課程設(shè)計報告_第1頁
已閱讀1頁,還剩18頁未讀 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、<p>  數(shù)據(jù)結(jié)構(gòu)課程設(shè)計報告</p><p>  題 目:赫夫曼編/譯碼器的實現(xiàn)</p><p><b>  學(xué)生姓名: </b></p><p>  學(xué) 號: </p><p><b>  所在學(xué)院: </b></p><p>

2、  班 級: </p><p>  指導(dǎo)教師: </p><p>  職 稱: </p><p>  2010年 6 月 25日</p><p>  XXX學(xué)院本科學(xué)生課程設(shè)計任務(wù)書</p><p><b>  摘要</b></p><p&

3、gt;  利用哈夫曼編碼進行信息通訊可以大大提高信道利用率,縮短信息傳輸時間,降低傳輸成本。但是,這要求在發(fā)送端通過一個編碼系統(tǒng)對待傳數(shù)據(jù)預(yù)先編碼;在接收端將傳來的數(shù)據(jù)進行譯碼(復(fù)原)。對于雙工信道(即可以雙向傳輸信息的信道),每端都需要一個完整的編/譯碼系統(tǒng),試為這樣的信息收發(fā)站寫一個哈夫曼編譯碼系統(tǒng)。</p><p>  關(guān)鍵字:數(shù)據(jù)結(jié)構(gòu)、哈夫曼編碼</p><p><b>

4、  目錄</b></p><p><b>  第一章. 序言1</b></p><p>  第二章.問題分析與說明1</p><p><b>  一.功能分析1</b></p><p>  二.問題描述與說明1</p><p>  第三章.程序總體設(shè)計2

5、</p><p>  一.設(shè)計思路及方案2</p><p>  二.設(shè)計的總體框架3</p><p>  第四章.詳細算法與設(shè)計5</p><p>  一.實現(xiàn)算法流程圖5</p><p>  二.哈夫曼編碼的算法6</p><p>  三.文件的編碼和解碼8</p>

6、<p>  第五章.程序調(diào)試與運行結(jié)果8</p><p>  第六章.課程設(shè)計總結(jié)9</p><p>  第七章.參考文獻10</p><p><b>  第八章.附錄11</b></p><p><b>  第一章. 序言</b></p><p><

7、b>  目的:</b></p><p>  1、為了使學(xué)生進一步理解和掌握課堂上所學(xué)各種基本抽象數(shù)據(jù)類型的邏輯結(jié)構(gòu)、存儲結(jié)構(gòu)和操作實現(xiàn)算法,以及它們在程序中的使用方法。</p><p>  為了使學(xué)生掌握軟件設(shè)計的基本內(nèi)容和設(shè)計方法,并培養(yǎng)學(xué)生進行規(guī)化</p><p><b>  軟件設(shè)計的能力。</b></p>

8、<p>  3、為了使學(xué)生掌握使用各種計算機資料和有關(guān)參考資料,提高學(xué)生進行程序設(shè)計的基本能力。</p><p><b>  意義:</b></p><p>  通過數(shù)據(jù)結(jié)構(gòu)課程設(shè)計,我掌握了赫夫曼編/譯碼器的實現(xiàn)所需要的各種知識,了解到了哈夫曼程序設(shè)計的基本原理和知識,我相信在以后的學(xué)習(xí)當(dāng)中我會更加的喜歡計算機這門高新技術(shù)學(xué)科。</p>&

9、lt;p>  第二章.問題分析與說明</p><p><b>  一.功能分析</b></p><p>  利用哈夫曼編碼進行信息通信可以大大提高信道利用率,縮短信息傳輸時間,降低傳輸成本。但是,這要求在發(fā)送端通過一個編碼系統(tǒng)對待傳數(shù)據(jù)預(yù)先編碼,在接收端將傳來的數(shù)據(jù)進行譯碼(復(fù)原)。對于雙工信道(即可以雙向傳輸信息的信道),每端都需要一個完整的編/譯碼系統(tǒng)。因此

10、為這樣的信息收發(fā)站寫一個哈夫曼碼的編/譯碼系統(tǒng)存在著相當(dāng)大的必要。</p><p>  相關(guān)知識:數(shù)據(jù)結(jié)構(gòu)、哈夫曼編碼譯碼器、程序設(shè)計格式等。</p><p>  二.問題描述與說明:</p><p>  1.《數(shù)據(jù)結(jié)構(gòu)》主要介紹一些最常用的數(shù)據(jù)結(jié)構(gòu),闡明各種數(shù)據(jù)結(jié)構(gòu)內(nèi)在的邏輯關(guān)系,討論其在計算機中的存儲表示,以及在其上進行各種運算時的實現(xiàn)算法,并對算法的效率進行簡

11、單的分析和討論。數(shù)據(jù)結(jié)構(gòu)是介于數(shù)學(xué)、計算機軟件和計算機硬件之間的一門計算機專業(yè)的核心課程,它是計算機程序設(shè)計、數(shù)據(jù)庫、操作系統(tǒng)、編譯原理及人工智能等的重要基礎(chǔ),廣泛的應(yīng)用于信息學(xué)、系統(tǒng)工程等各種領(lǐng)域。</p><p>  2. 哈夫曼編碼的應(yīng)用很廣泛,利用哈夫曼樹求得的用于通信的二進制編碼稱為哈夫曼編碼。樹中從根到每個葉子都有一條路徑,對路徑上的各分支約定:指向左子樹的分支表示“0”碼,指向右子樹的分支表示“1”

12、碼,取每條路徑上的“0”或“1”的序列作為和各個對應(yīng)的字符的編碼,這就是哈夫曼編碼。</p><p>  通常我們把數(shù)據(jù)壓縮的過程稱為編碼,解壓縮的過程稱為解碼。電報通信是傳遞文字的二進制碼形式的字符串。但在信息傳遞時,總希望總長度盡可能最短,即采用最短碼。</p><p>  作為信息管理專業(yè)的學(xué)生,我們應(yīng)該很好的掌握這門技術(shù)。在課堂上,我們能過學(xué)到許多的理論知識,但我們很少有過自己動手

13、實踐的機會!課程設(shè)計就是為解決這個問題提供了一個平臺。</p><p>  3. 課程設(shè)計題目:哈夫曼編\譯碼器</p><p><b>  任務(wù)和功能:</b></p><p> ?。?)從終端讀入字符集大小n,以及n個字符和n個權(quán)值,建立哈夫曼樹的存儲結(jié)構(gòu);</p><p>  (2)利用已經(jīng)建好的哈夫曼樹(如不在內(nèi)

14、存,則從文件htmTree中讀入),對給定的n個字符正文進行編碼,并輸出結(jié)果。</p><p> ?。?)利用已建好的哈夫曼樹,對給定的一個哈夫曼編碼進行譯碼,判斷此編碼對應(yīng)的字符,并輸出結(jié)果。</p><p><b>  4.問題分析</b></p><p>  該問題要求將輸入的字符以及相應(yīng)的權(quán)值建立哈夫曼樹,并利用建好的哈夫曼樹生成哈夫曼

15、編碼。把輸入的字符按權(quán)值從小到大排序,挑出2個最小權(quán)值供哈夫曼編碼調(diào)用,再將輸入的字符以及他的權(quán)值,按照哈夫曼規(guī)則建立二叉樹,從葉子到根逆向求編碼,再使用循環(huán),從根結(jié)點開始遍歷輸出。</p><p>  第三章.程序總體設(shè)計</p><p><b>  一.設(shè)計思路及方案</b></p><p><b>  1.哈弗曼樹的構(gòu)造<

16、/b></p><p>  根據(jù)哈夫曼樹的定義,一棵二叉樹要使其WPL值最小,必須使權(quán)值越大的葉結(jié)點越靠近根結(jié)點,而權(quán)值越小的葉結(jié)點越遠離根結(jié)點。</p><p>  這種方法的基本思想是:</p><p> ?。?)由給定的n個權(quán)值{W1,W2,…,Wn}構(gòu)造n棵只有一個葉結(jié)點的二叉樹,從而得到一個二叉樹的集合F={T1,T2,…,Tn};</p>

17、;<p>  (2)在F中選取根結(jié)點的權(quán)值最小和次小的兩棵二叉樹作為左、右子樹構(gòu)造一棵新的二叉樹,這棵新的二叉樹根結(jié)點的權(quán)值為其左、右子樹根結(jié)點權(quán)值之和;</p><p> ?。?)在集合F中刪除作為左、右子樹的兩棵二叉樹,并將新建立的二叉樹加入到集合F中;</p><p>  (4)重復(fù)(2)(3)兩步,當(dāng)F中只剩下一棵二叉樹時,這棵二叉樹便是所要建立的哈夫曼樹。</

18、p><p><b>  2.哈弗曼編碼 </b></p><p>  設(shè)S={d0,d1,……,d(n-1)}為待編碼的字符集,W={w0,w1,……,w(n-1)}是S中各字符在電文中出現(xiàn)的頻率?,F(xiàn)以W為權(quán)值,構(gòu)造哈弗曼樹。哈弗曼的每個葉子結(jié)點對應(yīng)一個字符。在哈弗曼樹的每個結(jié)點到其左孩子的邊上標(biāo)上0,到其右孩子的邊上標(biāo)上1。將從根的每個葉子的路徑上的數(shù)碼連接起來,就是該

19、葉子所代表的字符編碼。</p><p>  因此,設(shè)計電文總長最短的二進制前綴編碼,就是以n種字符出現(xiàn)的頻率作權(quán),構(gòu)造一棵哈夫曼樹,此構(gòu)造過程稱為哈夫曼編碼。</p><p><b>  3.哈弗曼譯碼</b></p><p>  譯碼過程為:自左向右逐一掃描碼文,并從哈弗曼樹的根開始,將掃描得到的二進制位串中的相鄰位于哈弗曼樹上標(biāo)的0,1相匹

20、配,以確定一條從跟到葉子結(jié)點的路徑,一但到達葉子,則譯出了一個字符;再回到樹根,從二進制的下一位開始繼續(xù)譯碼</p><p>  4.該系統(tǒng)將實現(xiàn)以下幾大功能:</p><p>  從終端讀入字符集大小n,以及n個字符和n個權(quán)值,建立哈夫曼樹的存儲結(jié)構(gòu);利用已經(jīng)建好的哈夫曼樹(如不在內(nèi)存,則從文件htmTree中讀入),對給定的n個字符正文進行編碼,并輸出結(jié)果。</p>&l

21、t;p>  利用已建好的哈夫曼樹,對給定的一個哈夫曼編碼進行譯碼,判斷此編碼對應(yīng)的字符,并輸出結(jié)果。</p><p><b>  二.設(shè)計的總體框架</b></p><p>  第四章.詳細算法與設(shè)計</p><p><b>  一.實現(xiàn)算法流程圖</b></p><p>  1.建立Huff

22、manTree</p><p>  void HaffmanTree::Haffman(int weight[],HaffmanTree HT[])</p><p>  查找哈夫曼鏈表中兩個權(quán)值最小的節(jié)點: </p><p><b>  創(chuàng)建哈弗曼樹</b></p><p>  2.哈夫曼編碼和譯碼(略)</p&

23、gt;<p>  二.哈夫曼編碼的算法 </p><p>  給定字符集的哈夫曼樹生成后,求哈夫曼編碼的具體實現(xiàn)過程是:依次以葉子T[i](0≤i≤n-1)為出發(fā)點,向上回溯至根為止。</p><p>  上溯時走左分支則生成代碼0,走右分支則生成代碼1。 </p><p><b>  注意: </b></p>&l

24、t;p> ?、?由于生成的編碼與要求的編碼反序,將生成的代碼先從后往前依次存放在一個臨時向量中,并設(shè)一個指針start指示編碼在</p><p>  該向量中的起始位置(start初始時指示向量的結(jié)束位置)。 </p><p> ?、?當(dāng)某字符編碼完成時,從臨時向量的start處將編碼復(fù)制到該字符相應(yīng)的位串bits中即可。 </p><p>  ③ 因為字符集

25、大小為n,故變長編碼的長度不會超過n,加上一個結(jié)束符'\0',bits的大小應(yīng)為n+1。 </p><p>  (2)字符集編碼的存儲結(jié)構(gòu)及其算法描述 </p><p>  typedef struct { </p><p>  char ch; //存儲字符 </p><p>  char bits[n+1]; //存放編碼

26、位串 </p><p>  }CodeNode; </p><p>  typedef CodeNode HuffmanCode[n]; </p><p>  void CharSetHuffmanEncoding(HuffmanTree T,HuffmanCode H) </p><p>  {//根據(jù)哈夫曼樹T求哈夫曼編碼表H </

27、p><p>  int c,p,i;//c和p分別指示T中孩子和雙親的位置 </p><p>  char cd[n+1]; //臨時存放編碼 </p><p>  int start; //指示編碼在cd中的起始位置 </p><p>  cd[n]='\0'; //編碼結(jié)束符 </p><p>  fo

28、r(i=0,i<n,i++){ //依次求葉子T[i]的編碼 </p><p>  H[i].ch=getchar();//讀入葉子T[i]對應(yīng)的字符 </p><p>  start=n; //編碼起始位置的初值 </p><p>  c=i; //從葉子T[i]開始上溯 </p><p>  while((p=T[c].parent

29、)>=0){//直至上溯到T[c]是樹根為止 </p><p>  //若T[c]是T[p]的左孩子,則生成代碼0;否則生成代碼1 </p><p>  cd[--start]=(T[p).1child==C)?'0':'1'; </p><p>  c=p; //繼續(xù)上溯 </p><p><b&

30、gt;  } </b></p><p>  strcpy(H[i].bits,&cd[start]); //復(fù)制編碼位串 </p><p>  }//endfor </p><p>  }//CharSetHuffmanEncoding</p><p>  三.文件的編碼和解碼 (略)</p><p&g

31、t;  第五章.程序調(diào)試與運行結(jié)果</p><p><b>  運行結(jié)果圖:</b></p><p><b>  運行結(jié)果分析:</b></p><p>  通過調(diào)試發(fā)現(xiàn)該程序滿足哈弗曼樹,哈弗曼編碼的基本要求,滿足課程設(shè)計任務(wù)的基本功能與要求。但是,該程序還是有所欠缺和不足,不能通過編碼譯出電文。在以后的學(xué)習(xí)中希望能將其

32、實現(xiàn),使程序變得更完善。</p><p>  第六章.課程設(shè)計總結(jié)</p><p>  通過一周的課程設(shè)計使我對哈夫曼樹以及哈夫曼編碼有了更深的認識和理解,也使我更加明白哈夫曼編碼譯碼在信息技術(shù)中的重要性和地位。</p><p>  通過對數(shù)據(jù)結(jié)構(gòu)和課程設(shè)計的學(xué)習(xí),使我們能夠以問題求解方法、程序設(shè)計方法以及一些典型的數(shù)據(jù)結(jié)構(gòu)算法為研究對象,分析數(shù)據(jù)對象的特征,掌握數(shù)

33、據(jù)組織的方法和在計算機中的表示方法,為數(shù)據(jù)選擇適當(dāng)?shù)倪壿嫿Y(jié)構(gòu)、存儲結(jié)構(gòu)以及相應(yīng)的處理算法,使我們初步掌握了算法的時間、空間復(fù)雜度的分析技巧,并逐步培養(yǎng)了良好的程序設(shè)計風(fēng)格以及進行復(fù)雜程序設(shè)計的技能。數(shù)據(jù)結(jié)構(gòu)一科的重要內(nèi)容和主要難點是讓我們理解、習(xí)慣和熟悉算法構(gòu)造性思維方法。</p><p>  在課設(shè)過程中,我深刻認識到算法的邏輯性對程序的重要影響,算法的準(zhǔn)確度對程序運行結(jié)果的重要影響,構(gòu)建最小代價生成樹時,一個

34、細微的循環(huán)控量的錯誤都能影響到程序的正確性,而所有的代碼機制都是為一個目標(biāo)的實現(xiàn)而運作的,所以,細致是實現(xiàn)算法和程序準(zhǔn)確性必不可少的。</p><p>  許多的錯誤讓我明白了一個道理---細心是非常重要的。同時,對于編程者而言,思路清晰是相當(dāng)重要的。在適當(dāng)?shù)臅r候和同學(xué)一起交流探討是一個十分好的學(xué)習(xí)機會。請教老師也很重要,因為畢竟我們是新手,對于某些問題很難弄清楚。而且,某些錯誤對于我們來說有時候想半天都弄不來,

35、但老師幾下下就搞好了,這樣就更加有效地節(jié)約了時間。</p><p>  做課程設(shè)計不僅讓我修補了以前學(xué)習(xí)的漏洞,也讓我知道一個道理:編程需要興趣和實際動手。這應(yīng)該可以借鑒在老師的教學(xué)工作上。創(chuàng)新思維至關(guān)重要,這不僅能讓我們寫出精簡的代碼,也有助于開發(fā)出高效的程序。</p><p><b>  第七章.參考文獻</b></p><p>  [1]

36、《數(shù)據(jù)結(jié)構(gòu)》(C語言版),劉大有等,高等教育出版社</p><p> ?。?]《數(shù)據(jù)結(jié)構(gòu)》(C語言版),嚴(yán)蔚敏等,清華大學(xué)出版社</p><p>  [3]《C語言程序設(shè)計》(第二版),譚浩強、張溫基等編著,高等教育出版社</p><p> ?。?]《數(shù)據(jù)結(jié)構(gòu)課程設(shè)計》,蘇仕華等,機械工業(yè)出版社</p><p> ?。?]《C++面向?qū)ο蟪绦?/p>

37、設(shè)計》,譚浩強編著,清華出版社,中國鐵道出版社</p><p>  [6]《C程序設(shè)計語言》,徐寶文 李志等著,機械工業(yè)出版社</p><p> ?。?]《C和指針》,徐波譯,人民郵電出版社</p><p>  [8]《C陷阱與缺陷》,高巍譯,人民郵電出版社</p><p>  [9]《C專家編程》,徐波譯,人民郵電出版社</p>

38、<p>  [10]《實用C語言編程》,郭大海譯,中國電力出版社</p><p> ?。?1]《C語言核心技術(shù)》,蔡學(xué)鏞譯,機械工業(yè)出版社</p><p><b>  第八章.附錄</b></p><p><b>  源程序:</b></p><p>  #include<ios

39、tream></p><p>  #include<iomanip></p><p>  #include<string></p><p>  using namespace std;</p><p>  const int MaxValue = 10000;</p><p>  cla

40、ss HaffmanTree</p><p><b>  {</b></p><p><b>  public:</b></p><p>  HaffmanTree(int n);</p><p>  HaffmanTree();</p><p>  ~HaffmanTree

41、();</p><p>  void Haffman(int weight[],HaffmanTree HT[]);</p><p>  void HaffmanCode(HaffmanTree haffTree[],HaffmanTree HaffCode[],char ch[],string s);</p><p><b>  private:<

42、/b></p><p>  int weight;//權(quán)值</p><p>  int flag;//標(biāo)記</p><p>  int parent;//雙親結(jié)點下標(biāo)</p><p>  int leftChild;//左孩子下標(biāo)</p><p>  

43、int rightChild;//右孩子下標(biāo)</p><p>  int bit[6]; //數(shù)組</p><p>  int start;//編碼的起始下標(biāo)</p><p><b>  int N;</b></p><p><b>  };</b>

44、</p><p>  HaffmanTree::HaffmanTree(int n)</p><p><b>  {</b></p><p><b>  N=n;</b></p><p><b>  }</b></p><p>  HaffmanTree

45、::HaffmanTree()</p><p><b>  {</b></p><p><b>  }</b></p><p>  HaffmanTree::~HaffmanTree()</p><p><b>  {</b></p><p><

46、;b>  }</b></p><p>  void HaffmanTree::Haffman(int weight[],HaffmanTree HT[])</p><p><b>  {</b></p><p>  int j, m1, m2, x1, x2;</p><p>  //哈夫曼樹haffT

47、ree初始化。n個葉結(jié)點的哈夫曼樹共有2n-1個結(jié)點</p><p>  for(int i = 0; i < 2 * N - 1 ; i++)</p><p><b>  {</b></p><p>  if(i < N) HT[i].weight = weight[i];</p><p>  else

48、 HT[i].weight = 0;</p><p>  HT[i].parent = 0;</p><p>  HT[i].flag = 0;</p><p>  HT[i].leftChild = -1;</p><p>  HT[i].rightChild = -1;</p><p><b>

49、  }</b></p><p>  //構(gòu)造哈夫曼樹haffTree的n-1個非葉結(jié)點</p><p>  for(i = 0;i < N-1;i++)</p><p><b>  {</b></p><p>  m1 = m2 = MaxValue;</p><p>  x1

50、= x2 = 0;</p><p>  for(j = 0; j < N+i;j++)</p><p><b>  {</b></p><p>  if(HT[j].weight < m1 && HT[j].flag == 0)</p><p><b>  {</b>&l

51、t;/p><p><b>  m2 = m1;</b></p><p><b>  x2 = x1;</b></p><p>  m1 = HT[j].weight;</p><p><b>  x1 = j;</b></p><p><b>  

52、}</b></p><p>  else if(HT[j].weight < m2 && HT[j].flag == 0)</p><p><b>  {</b></p><p>  m2 = HT[j].weight;</p><p><b>  x2 = j;</b&

53、gt;</p><p><b>  }</b></p><p><b>  }</b></p><p>  //將找出的兩棵權(quán)值最小的子樹合并為一棵子樹</p><p>  HT[x1].parent = N+i; </p><p>  HT[x2].parent =

54、 N+i;</p><p>  HT[x1].flag = 1;</p><p>  HT[x2].flag = 1;</p><p>  HT[N+i].weight = HT[x1].weight+HT[x2].weight;</p><p>  HT[N+i].leftChild = x1;</p><p

55、>  HT[N+i].rightChild = x2;</p><p><b>  }</b></p><p><b>  }</b></p><p>  void HaffmanTree::HaffmanCode(HaffmanTree haffTree[], HaffmanTree HaffCode[],char

56、 ch[],string s)</p><p><b>  {</b></p><p>  int child, parent;</p><p>  string cs;</p><p>  for(int i = 0; i < N; i++)</p><p><b>  {&

57、lt;/b></p><p>  start = N-1;//不等長編碼的最后一位為n-1</p><p>  weight = haffTree[i].weight;//取得編碼對應(yīng)權(quán)值的字符</p><p>  child = i;</p><p>  parent = haffTree[child].parent;&l

58、t;/p><p>  //由葉結(jié)點向上直到根結(jié)點</p><p>  while(parent != 0)</p><p><b>  {</b></p><p>  if(haffTree[parent].leftChild == child)</p><p>  bit[start] = 0;

59、//左孩子結(jié)點編碼0</p><p>  else</p><p>  bit[start] = 1;//右孩子結(jié)點編碼1</p><p><b>  start--;</b></p><p>  child = parent;</p><p>  parent = ha

60、ffTree[child].parent;</p><p><b>  }</b></p><p>  //保存葉結(jié)點的編碼和不等長編碼的起始位</p><p>  for(int j = start+1; j < N; j++) </p><p>  HaffCode[i].bit[j] = bit[j];<

61、;/p><p>  HaffCode[i].start = start;</p><p>  HaffCode[i].weight = weight;//記住編碼對應(yīng)權(quán)值的字符</p><p><b>  }</b></p><p>  cout<<setw(16)<<"權(quán)值"

62、;<<setw(11)<<"編碼"<<endl;</p><p>  for(i = 0; i < N; i++)</p><p><b>  {</b></p><p>  cout<<setw(5)<<ch[i]<<setw(10)<&l

63、t;HaffCode[i].weight<<setw(10);</p><p>  for(int j = HaffCode[i].start+1; j < N; j++)</p><p>  cout << HaffCode[i].bit[j];</p><p>  cout << endl;</p><

64、;p><b>  }</b></p><p>  system("pause");</p><p>  cout<<"進行譯碼:";</p><p>  for(i=0;i<s.size();i++)</p><p><b>  {</b&g

65、t;</p><p>  for(int j=0;j<N;j++)</p><p><b>  {</b></p><p>  if(s[i]==ch[j])</p><p>  for(int m = HaffCode[j].start+1; m < N; m++)</p><p>

66、  cout << HaffCode[j].bit[m];</p><p><b>  }</b></p><p><b>  }</b></p><p>  cout<<endl;</p><p><b>  }</b></p><

67、p>  void main(void)</p><p><b>  {</b></p><p><b>  int m,q;</b></p><p><b>  char p;</b></p><p>  string str,ch;</p><p&g

68、t;  cout<<"請輸入權(quán)值個數(shù):";</p><p><b>  cin>>m;</b></p><p>  int weight[26];</p><p>  char node[26];</p><p>  for(int i=0;i<m;++i)</p&

69、gt;<p><b>  {</b></p><p>  cout<<"請輸入第"<<i+1<<"個字符:";</p><p><b>  cin>>p;</b></p><p>  node[i]=p;</p>

70、;<p>  cout<<" 請輸入權(quán)值:";</p><p><b>  cin>>q;</b></p><p>  weight[i]=q;</p><p>  }system("pause");</p><p>  cout&l

71、t;<"請輸入電文(注意電文必須只包含以上字符):";</p><p><b>  cin>>str;</b></p><p>  HaffmanTree h(m);</p><p>  HaffmanTree *myHaffTree = new HaffmanTree[2*m+1];</p>

72、<p>  HaffmanTree *myHaffCode = new HaffmanTree[m];</p><p>  h.Haffman(weight , myHaffTree);</p><p>  h.HaffmanCode(myHaffTree, myHaffCode,node,str);</p><p><b>  }</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)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論