版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
1、<p><b> 課 程 設(shè) 計</b></p><p> 課程名稱_ _數(shù)據(jù)結(jié)構(gòu)課程設(shè)計_ </p><p> 題目名稱_ 哈夫曼編碼譯碼器_ </p><p> 學(xué)生學(xué)院 </p><p> 專業(yè)班級
2、 </p><p> 學(xué) 號 </p><p> 學(xué)生姓名 </p><p> 指導(dǎo)教師 </p><p> 2011 年 12月 23日</p>
3、<p><b> 摘要:</b></p><p> 在當(dāng)今信息爆炸時代,如何采用有效的數(shù)據(jù)壓縮技術(shù)來節(jié)省數(shù)據(jù)文件的存儲空間和計算機網(wǎng)絡(luò)的傳送時間已越來越引起人們的重視。電報通信是傳遞文字的二進制碼形式的字符串。但在信息傳遞時,總希望總長度盡可能最短,即采用最短碼。</p><p><b> 關(guān)鍵字:</b></p>
4、<p> 哈夫曼樹 編碼 解碼 數(shù)據(jù)壓縮技術(shù)</p><p><b> 目 錄</b></p><p><b> 摘要:1</b></p><p><b> 關(guān)鍵字:1</b></p><p> 第一章 需求分析3</p
5、><p> 第二章 數(shù)據(jù)結(jié)構(gòu)定義及其操作實現(xiàn)3</p><p> 第三章 程序設(shè)計及其實現(xiàn)3</p><p> 3.1 從文件讀入原文3</p><p> 3.2 統(tǒng)計原文中各字符的權(quán)值4</p><p><b> 3.3 編碼5</b></p><p>
6、; 3.4 解碼6</p><p><b> 3.5 主函數(shù)7</b></p><p> 第四章 運行結(jié)果及其分析8</p><p> 第五章 問題及其解決方法10</p><p> 第六章 心得體會(設(shè)計總結(jié))10</p><p> 附錄——源程序11</p&g
7、t;<p><b> 1、 頭文件11</b></p><p> 2、 赫夫曼編碼算法12</p><p><b> 3、 主函數(shù)18</b></p><p> 參 考 文 獻21</p><p><b> 需求分析</b></p&g
8、t;<p> 1.問題要求:打開一篇英文文章,統(tǒng)計出每個字符出現(xiàn)的次數(shù),然后以他們?yōu)闄?quán)值,對每個字符進行編碼,編碼完成后對其編碼進行譯碼。</p><p> 程序運行環(huán)境:windows、visual c++或java等</p><p><b> 要求:</b></p><p> 輸入一篇英文文章,根據(jù)字符出現(xiàn)的次數(shù)給出哈
9、夫曼編碼方式。</p><p> 對英文文章進行編碼;</p><p> 對編碼進行譯碼核對正確性</p><p> 數(shù)據(jù)結(jié)構(gòu)定義及其操作實現(xiàn)</p><p> 2.1 哈弗曼樹節(jié)點</p><p> typedef struct </p><p><b> {</b
10、></p><p> unsigned int weight;</p><p> unsigned int parent;</p><p> unsigned int lchild;</p><p> unsigned int rchild;</p><p> }HuffTreeNode,*HuffTr
11、ee;</p><p> 2.2 字符-權(quán)值-編碼映射</p><p> typedef struct</p><p><b> {</b></p><p><b> char c;</b></p><p> unsigned int weight;</p&g
12、t;<p> char *code;</p><p> }CharMapNode,*CharMap;</p><p><b> 程序設(shè)計及其實現(xiàn)</b></p><p> 3.1 從文件讀入原文</p><p> void Huffman::ReadTextFromFile(char *filen
13、ame)</p><p><b> {</b></p><p> ifstream infile(filename);</p><p> if(!infile)</p><p><b> {</b></p><p> cerr << "無法打開
14、文件!" <<endl;</p><p><b> return;</b></p><p><b> }</b></p><p><b> char c;</b></p><p> while(infile.get(c))</p>&
15、lt;p><b> {</b></p><p> text += c;</p><p><b> }</b></p><p><b> } </b></p><p> 3.2 統(tǒng)計原文中各字符的權(quán)值</p><p> void Huf
16、fman::CountCharsWeight()</p><p><b> {</b></p><p> if (text.empty())</p><p><b> return;</b></p><p> if (chars != NULL)</p><p>
17、delete chars;</p><p> int i = 0;</p><p><b> n = 0;</b></p><p> chars = new CharMapNode[2];</p><p> chars[1].c = text[i];</p><p> chars[1].
18、weight = 1;</p><p><b> ++n;</b></p><p> for (i = 1; i != text.size(); ++i)</p><p><b> {</b></p><p><b> int j;</b></p><
19、;p> for (j = 1; j <= n; ++j)//遍歷當(dāng)前字符表,如果已存在該字符,權(quán)值+1</p><p><b> {</b></p><p> if (text[i] == chars[j].c)</p><p><b> {</b></p><p> ++c
20、hars[j].weight;</p><p><b> break;</b></p><p><b> }</b></p><p><b> }</b></p><p> if (j > n)//該字符不存在,添加該字符</p><p&g
21、t;<b> {</b></p><p><b> ++n;</b></p><p> CharMap newchars = new CharMapNode[n + 1];</p><p> memcpy(newchars, chars, n * sizeof(CharMapNode));</p>&
22、lt;p> delete chars;</p><p> chars = newchars;</p><p> chars[n].c = text[i];</p><p> chars[n].weight = 1;</p><p><b> }</b></p><p><b&
23、gt; }</b></p><p><b> }</b></p><p><b> 3.3 編碼</b></p><p> void Huffman::MakeCharMap()</p><p><b> {</b></p><p&g
24、t; if (n <= 1)</p><p><b> return;</b></p><p> int m = 2 * n - 1;//哈弗曼樹所需節(jié)點數(shù)</p><p> huffTree = new HuffTreeNode[m+1];//0號單元未使用</p><p><b>
25、//初始化</b></p><p><b> int i;</b></p><p> for (i = 1; i <= n; ++i)</p><p><b> {</b></p><p> huffTree[i].weight = chars[i].weight;<
26、/p><p> huffTree[i].parent = 0;</p><p> huffTree[i].lchild = 0;</p><p> huffTree[i].rchild = 0;</p><p><b> }</b></p><p> for (i = n + 1; i &l
27、t;= m; ++i)</p><p><b> {</b></p><p> huffTree[i].weight = 0;</p><p> huffTree[i].parent = 0;</p><p> huffTree[i].lchild = 0;</p><p> huffT
28、ree[i].rchild = 0;</p><p><b> }</b></p><p><b> //建哈弗曼樹</b></p><p> for (i = n + 1; i <= m; ++i)</p><p><b> {</b></p>&
29、lt;p> int s1,s2;</p><p> select(i - 1, s1, s2);</p><p> huffTree[s1].parent = huffTree[s2].parent = i;</p><p> huffTree[i].lchild = s1;</p><p> huffTree[i].rchi
30、ld = s2;</p><p> huffTree[i].weight = huffTree[s1].weight + huffTree[s2].weight;</p><p><b> }</b></p><p> //從葉子到根節(jié)點逆向求每個字符的哈弗曼編碼</p><p> char *cd = new
31、char[n];//分配求編碼的工作空間(每個字符編碼結(jié)果最長n-1再加上'\0')</p><p> cd[n-1] = '\0';//編碼結(jié)束符</p><p> for(i = 1; i <= n; ++i)//逐個字符求哈弗曼編碼</p><p><b> {</b></p&
32、gt;<p> int start = n - 1;</p><p><b> int c,f;</b></p><p> //從葉子到根逆向求編碼</p><p> for (c = i, f = huffTree[i].parent; f != 0; c = f, f = huffTree[f].parent)<
33、/p><p><b> {</b></p><p> if (huffTree[f].lchild == c)//左孩子編碼為0</p><p> cd[--start] = '0';</p><p> else//右孩子編碼為1</p><p> cd[--
34、start] = '1';</p><p><b> }</b></p><p> chars[i].code = new char[n - start];//為第i個字符編碼分配空間</p><p> strcpy(chars[i].code,&cd[start]);</p><p>&
35、lt;b> }</b></p><p> delete cd;</p><p><b> }</b></p><p><b> 3.4 解碼</b></p><p> void Huffman::Decode()</p><p><b&g
36、t; {</b></p><p> text = "";</p><p> string::size_type i,count;</p><p> for (i = 0; i < code.size(); i += count)</p><p><b> {</b><
37、/p><p> //每個字符的編碼結(jié)果最長n-1,從1至n-1依次嘗試</p><p> for (count = 1; count < n; ++count)</p><p><b> {</b></p><p> for (int j = 1; j <= n; ++j)</p><
38、p> if (code.substr(i, count) == chars[j].code)</p><p><b> {</b></p><p> text += chars[j].c;</p><p> goto next;</p><p><b> }</b></p>
39、;<p><b> }</b></p><p><b> next:</b></p><p><b> ;</b></p><p><b> }</b></p><p><b> }</b></p>
40、<p><b> 3.5 主函數(shù)</b></p><p> int main()</p><p><b> {</b></p><p> cout << " ********************************************************
41、****" << endl;</p><p> cout << " * *" << endl;</p><p> cout << " *
42、 哈夫曼編碼譯碼器 *" << endl;</p><p> cout << " * 1、打開一篇英文文章或輸入一篇文章 *"<< endl;</p><p> cout << " *
43、 2、根據(jù)字符出現(xiàn)的次數(shù)以他們?yōu)闄?quán)值給出哈夫曼編碼方式 *" << endl;</p><p> cout << " * 3、對英文文章進行編碼 *" << endl;</p><p> cout << "
44、 * 4、對編碼進行譯碼核對正確性 *" << endl;</p><p> cout << " * *" << endl;</p><p&
45、gt; cout << " ************************************************************" << endl<<endl;</p><p> system("pause");</p><p> cout << endl;</
46、p><p> Huffman huffman;</p><p> huffman.ReadTextFromFile("text.txt");</p><p> cout << "程序自動統(tǒng)計字符和權(quán)值" << endl;</p><p> huffman.CountChars
47、Weight();</p><p> cout << endl;</p><p> cout << "字符及對應(yīng)權(quán)值:" << endl;</p><p> huffman.PrintCharWeight();</p><p> cout << endl;</p
48、><p> system("pause");</p><p> cout << endl;</p><p> huffman.MakeCharMap();</p><p> cout << "字符及對應(yīng)編碼:" << endl;</p><p&
49、gt; huffman.PrintCharCode();</p><p> cout << endl;</p><p> system("pause");</p><p> cout << endl;</p><p> cout << "對原文進行編碼:"
50、<< endl;</p><p> cout << "原文:" << endl;</p><p> huffman.PrintText();</p><p> huffman.Encode();</p><p> cout << endl;</p>&l
51、t;p> cout << "編碼:" << endl;</p><p> huffman.PrintCode();</p><p> huffman.SaveCodeToFile("code.txt");</p><p> cout << endl;</p>&l
52、t;p> system("pause");</p><p> cout << endl;</p><p> cout << "對編碼進行解碼:" << endl;</p><p> huffman.ReadCodeFromFile("code.txt");&
53、lt;/p><p> cout << "編碼:" << endl;</p><p> huffman.PrintCode();</p><p> huffman.Decode();</p><p> cout << endl;</p><p> cout &
54、lt;< "原文:" << endl;</p><p> huffman.PrintText();</p><p> huffman.SaveTextToFile("resulttext.txt");</p><p> cout << endl;</p><p>&l
55、t;b> return 0;</b></p><p><b> }</b></p><p><b> 運行結(jié)果及其分析</b></p><p> 本次測試是先建立一個名為test.txt的文本文檔,內(nèi)容為:This is my HuffmanCoding.</p><p>
56、 運行程序,結(jié)果如圖:</p><p><b> 問題及其解決方法</b></p><p> 編碼不熟練,經(jīng)常出現(xiàn)漏符號或多符號,多次調(diào)試改正</p><p> C++不熟練,讀取保存文件出錯,回歸課本,改正代碼</p><p> 心得體會(設(shè)計總結(jié))</p><p> 在課程設(shè)計過程
57、中,我們每個人選擇一個課題,認真研究,根據(jù)課堂講授內(nèi)容,借助書本,自己動手實踐。這樣不但有助于我們消化課堂所講解的內(nèi)容,還可以增強我們的獨立思考能力和動手能力;通過編寫實驗代碼和調(diào)試運行,我們可以逐步積累調(diào)試C程序的經(jīng)驗并逐漸培養(yǎng)我們的編程能力、用計算機解決實際問題的能力。</p><p> 在課程設(shè)計過程中,我們不但有自己的獨立思考,還借助各種參考文獻來幫助我們完成系統(tǒng)。更為重要的是,我們同學(xué)之間加強了交流,
58、在對問題的認識方面可以交換不同的意見。</p><p> 數(shù)據(jù)結(jié)構(gòu)課程具有比較強的理論性,同時也具有較強的可應(yīng)用性和實踐性。課程設(shè)計是一個重要的教學(xué)環(huán)節(jié)。我們在一般情況下都能夠重視實驗環(huán)節(jié),但是容易忽略實驗的總結(jié),忽略實驗報告的撰寫。通過這次實驗讓我們明白:作為一名大學(xué)生必須嚴(yán)格訓(xùn)練分析總結(jié)能力、書面表達能力。需要逐步培養(yǎng)書寫科學(xué)實驗報告以及科技論文的能力。只有這樣,我們的綜合素質(zhì)才會有好的提高。</p&
59、gt;<p><b> 附錄——源程序</b></p><p><b> 頭文件</b></p><p> // Huffman.h</p><p> #pragma once</p><p> #endif // _MSC_VER > 1000</p>
60、<p> #include <string></p><p> /***********************數(shù)據(jù)結(jié)構(gòu)***********************/</p><p><b> //哈弗曼樹節(jié)點</b></p><p> typedef struct </p><p>&l
61、t;b> {</b></p><p> unsigned int weight;</p><p> unsigned int parent;</p><p> unsigned int lchild;</p><p> unsigned int rchild;</p><p> }Huff
62、TreeNode,*HuffTree;</p><p> //字符-權(quán)值-編碼映射</p><p> typedef struct</p><p><b> {</b></p><p><b> char c;</b></p><p> unsigned int w
63、eight;</p><p> char *code;</p><p> }CharMapNode,*CharMap;</p><p> /*************************類定義****************************/</p><p> class Huffman </p><
64、p><b> {</b></p><p><b> private:</b></p><p> void select(int n, int &s1, int &s2);</p><p> HuffTree huffTree;//哈弗曼樹</p><p> Char
65、Map chars;//字符表</p><p> int n;//字符數(shù)</p><p> std::string text;//原文</p><p> std::string code;//編碼</p><p><b> public:</b></p><p>
66、void InputCharsWeight();</p><p> void CountCharsWeight();</p><p> void Decode();</p><p> void ReadTextFromFile(char *filename);</p><p> void ReadCodeFromFile(char *
67、filename);</p><p> void SaveTextToFile(char *filename);</p><p> void SaveCodeToFile(char *filename);</p><p> void PrintCode();</p><p> void MakeCharMap();</p>
68、<p> void PrintText();</p><p> void PrintCharCode();</p><p> void PrintCharWeight();</p><p> void SetCharMap(CharMap m, int number);</p><p> void Encode();
69、</p><p> Huffman();</p><p> virtual ~Huffman();</p><p><b> };</b></p><p><b> 赫夫曼編碼算法</b></p><p> // Huffman.cpp</p><
70、;p> #include "Huffman.h"</p><p> #include <iostream></p><p> #include <fstream></p><p> using namespace std;</p><p> Huffman::Huffman()<
71、;/p><p><b> {</b></p><p> huffTree = NULL;</p><p> chars = NULL;</p><p><b> n = 0;</b></p><p><b> }</b></p>&l
72、t;p> Huffman::~Huffman()</p><p><b> {</b></p><p><b> }</b></p><p> void Huffman::Encode()</p><p><b> {</b></p><p&
73、gt; code = "";</p><p> for (string::size_type i = 0; i != text.size(); ++i)</p><p><b> {</b></p><p> for (int j = 1; j <= n; ++j)</p><p>
74、if (chars[j].c == text[i])</p><p> code += chars[j].code;</p><p><b> }</b></p><p><b> }</b></p><p> void Huffman::SetCharMap(CharMap m, int
75、number)</p><p><b> {</b></p><p> chars = m;</p><p> n = number;</p><p><b> }</b></p><p> void Huffman::select(int n, int &
76、s1, int &s2)</p><p><b> {</b></p><p> s1 = s2 = 0;</p><p> for (int i = 1; i <= n; ++i)</p><p><b> {</b></p><p> if (hu
77、ffTree[i].parent != 0)</p><p><b> continue;</b></p><p> if (s1 == 0)</p><p><b> s1 = i;</b></p><p> else if (s2 == 0)</p><p>&l
78、t;b> {</b></p><p> if (huffTree[i].weight < huffTree[s1].weight)</p><p><b> {</b></p><p><b> s2 = s1;</b></p><p><b> s1 =
79、 i;</b></p><p><b> }</b></p><p><b> else</b></p><p><b> s2 = i;</b></p><p><b> }</b></p><p><b
80、> else</b></p><p><b> {</b></p><p> if (huffTree[i].weight < huffTree[s1].weight)</p><p><b> {</b></p><p><b> s2 = s1;<
81、;/b></p><p><b> s1 = i;</b></p><p><b> }</b></p><p> else if (huffTree[i].weight < huffTree[s2].weight)</p><p><b> s2 = i;</b
82、></p><p><b> }</b></p><p><b> }</b></p><p><b> }</b></p><p> void Huffman::PrintCharWeight()</p><p><b> {
83、</b></p><p> for (int i = 1; i <= n; ++i)</p><p><b> {</b></p><p> switch (chars[i].c)</p><p><b> {</b></p><p> case
84、'\t':</p><p> cout << "\\t";</p><p><b> break;</b></p><p> case '\n':</p><p> cout << "\\n";</p>
85、<p><b> break;</b></p><p><b> default:</b></p><p> cout << chars[i].c;</p><p><b> break;</b></p><p><b> }</
86、b></p><p> cout << "——" << chars[i].weight << endl;</p><p><b> }</b></p><p><b> }</b></p><p> void Huffman::P
87、rintCharCode()</p><p><b> {</b></p><p> for (int i = 1; i <= n; ++i)</p><p><b> {</b></p><p> switch (chars[i].c)</p><p><
88、;b> {</b></p><p> case '\t':</p><p> cout << "\\t";</p><p><b> break;</b></p><p> case '\n':</p><p&
89、gt; cout << "\\n";</p><p><b> break;</b></p><p><b> default:</b></p><p> cout << chars[i].c;</p><p><b> break;&
90、lt;/b></p><p><b> }</b></p><p> cout << "——" << chars[i].code << endl;</p><p><b> }</b></p><p><b> }<
91、;/b></p><p> void Huffman::PrintText()</p><p><b> {</b></p><p> cout << text << endl;</p><p><b> }</b></p><p>
92、void Huffman::PrintCode()</p><p><b> {</b></p><p> cout << code << endl;</p><p><b> }</b></p><p> void Huffman::MakeCharMap()<
93、;/p><p><b> {</b></p><p> if (n <= 1)</p><p><b> return;</b></p><p> int m = 2 * n - 1;</p><p> huffTree = new HuffTreeNode[
94、m+1];</p><p><b> int i;</b></p><p> for (i = 1; i <= n; ++i)</p><p><b> {</b></p><p> huffTree[i].weight = chars[i].weight;</p>&
95、lt;p> huffTree[i].parent = 0;</p><p> huffTree[i].lchild = 0;</p><p> huffTree[i].rchild = 0;</p><p><b> }</b></p><p> for (i = n + 1; i <= m; ++
96、i)</p><p><b> {</b></p><p> huffTree[i].weight = 0;</p><p> huffTree[i].parent = 0;</p><p> huffTree[i].lchild = 0;</p><p> huffTree[i].rc
97、hild = 0;</p><p><b> }</b></p><p> for (i = n + 1; i <= m; ++i)</p><p><b> {</b></p><p> int s1,s2;</p><p> select(i - 1, s
98、1, s2);</p><p> huffTree[s1].parent = huffTree[s2].parent = i;</p><p> huffTree[i].lchild = s1;</p><p> huffTree[i].rchild = s2;</p><p> huffTree[i].weight = huffTr
99、ee[s1].weight + huffTree[s2].weight;</p><p><b> }</b></p><p> char *cd = new char[n];</p><p> cd[n-1] = '\0';</p><p> for(i = 1; i <= n;
100、++i)</p><p><b> {</b></p><p> int start = n - 1;</p><p><b> int c,f;</b></p><p> for (c = i, f = huffTree[i].parent; f != 0; c = f, f = hu
101、ffTree[f].parent)</p><p><b> {</b></p><p> if (huffTree[f].lchild == c)</p><p> cd[--start] = '0';</p><p> else</p><p> cd
102、[--start] = '1';</p><p><b> }</b></p><p> chars[i].code = new char[n - start];</p><p> strcpy(chars[i].code,&cd[start]);</p><p><b> }&
103、lt;/b></p><p> delete cd;</p><p><b> }</b></p><p> void Huffman::ReadTextFromFile(char *filename)</p><p><b> {</b></p><p>
104、ifstream infile(filename);</p><p> if(!infile)</p><p><b> {</b></p><p> cerr << "無法打開文件!" <<endl;</p><p><b> return;</b&g
105、t;</p><p><b> }</b></p><p><b> char c;</b></p><p> while(infile.get(c))</p><p><b> {</b></p><p> text += c;</p&
106、gt;<p><b> }</b></p><p><b> }</b></p><p> void Huffman::SaveCodeToFile(char *filename)</p><p><b> {</b></p><p> ofstream
107、 outfile(filename);</p><p> if (!outfile)</p><p><b> {</b></p><p> cerr << "保存文件出錯!" << endl;</p><p><b> return;</b>&l
108、t;/p><p><b> }</b></p><p> outfile << code;</p><p><b> }</b></p><p> void Huffman::ReadCodeFromFile(char *filename)</p><p>&
109、lt;b> {</b></p><p> ifstream infile(filename);</p><p> if (!infile)</p><p><b> {</b></p><p> cerr << "無法打開文件!" <<endl;&l
110、t;/p><p><b> return;</b></p><p><b> }</b></p><p> infile >> code;</p><p><b> }</b></p><p> void Huffman::Decode
111、()</p><p><b> {</b></p><p> text = "";</p><p> string::size_type i,count;</p><p> for (i = 0; i < code.size(); i += count)</p><p
112、><b> {</b></p><p> for (count = 1; count < n; ++count)</p><p><b> {</b></p><p> for (int j = 1; j <= n; ++j)</p><p> if (code.subs
113、tr(i, count) == chars[j].code)</p><p><b> {</b></p><p> text += chars[j].c;</p><p> goto next;</p><p><b> }</b></p><p><b>
114、; }</b></p><p><b> next:</b></p><p><b> ;</b></p><p><b> }</b></p><p><b> }</b></p><p> void Hu
115、ffman::CountCharsWeight()</p><p><b> {</b></p><p> if (text.empty())</p><p><b> return;</b></p><p> if (chars != NULL)</p><p>
116、 delete chars;</p><p> int i = 0;</p><p><b> n = 0;</b></p><p> chars = new CharMapNode[2];</p><p> chars[1].c = text[i];</p><p> chars[1]
117、.weight = 1;</p><p><b> ++n;</b></p><p> for (i = 1; i != text.size(); ++i)</p><p><b> {</b></p><p><b> int j;</b></p>&l
118、t;p> for (j = 1; j <= n; ++j)</p><p><b> {</b></p><p> if (text[i] == chars[j].c)</p><p><b> {</b></p><p> ++chars[j].weight;</p&
119、gt;<p><b> break;</b></p><p><b> }</b></p><p><b> }</b></p><p> if (j > n)</p><p><b> {</b></p>&
120、lt;p><b> ++n;</b></p><p> CharMap newchars = new CharMapNode[n + 1];</p><p> memcpy(newchars, chars, n * sizeof(CharMapNode));</p><p> delete chars;</p>&l
121、t;p> chars = newchars;</p><p> chars[n].c = text[i];</p><p> chars[n].weight = 1;</p><p><b> }</b></p><p><b> }</b></p><p>
122、<b> }</b></p><p> void Huffman::SaveTextToFile(char *filename)</p><p><b> {</b></p><p> ofstream outfile(filename);</p><p> if (!outfile)&l
123、t;/p><p><b> {</b></p><p> cerr << "保存文件出錯!" << endl;</p><p><b> return;</b></p><p><b> }</b></p><
124、p> outfile << text;</p><p><b> }</b></p><p><b> 主函數(shù)</b></p><p> //main.cpp</p><p> #include <iostream></p><p>
125、 #include "Huffman.h"</p><p> using namespace std;</p><p> int main()</p><p><b> {</b></p><p> cout << " *********************
126、***************************************" << endl;</p><p> cout << " * *" << endl;</p><p> cout &l
127、t;< " * 哈夫曼編碼譯碼器 *" << endl;</p><p> cout << " * 1、打開一篇英文文章或輸入一篇文章 *"<< endl;</p><
128、;p> cout << " * 2、根據(jù)字符出現(xiàn)的次數(shù)以他們?yōu)闄?quán)值給出哈夫曼編碼方式 *" << endl;</p><p> cout << " * 3、對英文文章進行編碼 *" << endl;</p>
129、<p> cout << " * 4、對編碼進行譯碼核對正確性 *" << endl;</p><p> cout << " * *&quo
130、t; << endl;</p><p> cout << " ************************************************************" << endl<<endl;</p><p> system("pause");</p>
131、<p> cout << endl;</p><p> Huffman huffman;</p><p> huffman.ReadTextFromFile("text.txt");</p><p> cout << "程序自動統(tǒng)計字符和權(quán)值" << endl;</p
132、><p> huffman.CountCharsWeight();</p><p> cout << endl;</p><p> cout << "字符及對應(yīng)權(quán)值:" << endl;</p><p> huffman.PrintCharWeight();</p>&
133、lt;p> cout << endl;</p><p> system("pause");</p><p> cout << endl;</p><p> huffman.MakeCharMap();</p><p> cout << "字符及對應(yīng)編碼:&quo
134、t; << endl;</p><p> huffman.PrintCharCode();</p><p> cout << endl;</p><p> system("pause");</p><p> cout << endl;</p><p>
135、cout << "對原文進行編碼:" << endl;</p><p> cout << "原文:" << endl;</p><p> huffman.PrintText();</p><p> huffman.Encode();</p><p>
136、 cout << endl;</p><p> cout << "編碼:" << endl;</p><p> huffman.PrintCode();</p><p> huffman.SaveCodeToFile("code.txt");</p><p>
137、 cout << endl;</p><p> system("pause");</p><p> cout << endl;</p><p> cout << "對編碼進行解碼:" << endl;</p><p> huffman.ReadC
138、odeFromFile("code.txt");</p><p> cout << "編碼:" << endl;</p><p> huffman.PrintCode();</p><p> huffman.Decode();</p><p> cout <<
139、 endl;</p><p> cout << "原文:" << endl;</p><p> huffman.PrintText();</p><p> huffman.SaveTextToFile("resulttext.txt");</p><p> cout &l
140、t;< endl;</p><p><b> return 0;</b></p><p><b> }</b></p><p> 參 考 文 獻</p><p> [1] 嚴(yán)蔚敏,數(shù)據(jù)結(jié)構(gòu)(C語言版),清華大學(xué)出版社,2007</p><p> [2]
溫馨提示
- 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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 數(shù)據(jù)結(jié)構(gòu)哈夫曼編碼譯碼器課程設(shè)計報告(有源程序)
- 哈夫曼編碼譯碼器課程設(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è)計報告)
- 數(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è)計--- 哈夫曼樹的建立與實現(xiàn)
- 哈夫曼課程設(shè)計報告--哈夫曼編譯碼器
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計---哈弗曼編碼譯碼
評論
0/150
提交評論