資源簡介
哈夫曼編碼與譯碼的c++實現(xiàn),主要功能哈夫曼樹的創(chuàng)建,可把數(shù)據(jù)轉換為編碼后存入文件,也可以對文件中的信息進行編碼與譯碼,代碼清晰整潔,源碼內有詳細的注釋可輔助理解,功能符合課程設計的要求,并加以擴展。

代碼片段和文件信息
/*更新*/?
/*從文件讀取數(shù)據(jù)*/?
/*
測試數(shù)據(jù)
Hello?World?
1?1?3?3?2?1?1?2?1?3?1
010001011011100000110011100110001111001
*/?
#include
#include
#include
using?namespace?std;
//typedef?char?ElementType;
typedef?char?**?HuffmanCode;
typedef?struct?
{
char?data;?
int?weight;//節(jié)點的權值
int?parentlchildrchild;//節(jié)點的雙親,左孩子,右孩子的下標?
}HtNode*HuffmanTree;
typedef?struct?Node?
{
char?data;
struct?Node?*next;
}Node*DeNode;
void?menu();?
//創(chuàng)建哈夫曼樹HTn個數(shù)據(jù)?
bool?CreatHuffmanTree(HuffmanTree?&HTint?n);
//在哈夫曼樹HT中選擇兩個雙親域為0的權值最小的兩個節(jié)點?
void?Select(HuffmanTree?&HTint?rangint?&min1int?&min2);
//根據(jù)哈夫曼樹求哈夫曼編碼
void?CreatHuffmanCode(HuffmanTree?HTHuffmanCode?&HCint?n);?
//翻譯報文?
void?TraverseData(HuffmanTree?HTHuffmanCode?&HCstring?dataint?n);
//譯碼?
bool?deHuffmanTree(HuffmanTree?HTstring?codeint?n);?
//用鏈表保存譯碼信息?
void?insert(char?data);
DeNode?Head;
int?flag?=?0;
int?main()
{
Head?=?new?Node;
Head->next?=?NULL;
while(1)
{
menu();
}
return?0;
}
void?menu()
{
HuffmanTree?HT;
HuffmanCode?HC;
int?n;
cout?<“|-------------------------------------------|“< cout?<“|??????????????哈夫曼編碼與譯碼?????????????|“< cout?<“|?????????????????【1】編碼?????????????????|“< cout?<“|?????????????????【2】譯碼?????????????????|“< cout?<“|?????????????????【3】退出?????????????????|“< cout?<“|-------------------------------------------|“< int?option;
cout<<“請選擇操作:“;
cin>>option;
if(1?==?option)
{
flag?=?1;
cout<<“輸入葉子結點的個數(shù):“;
cin>>n;
if(CreatHuffmanTree(HTn))
{
CreatHuffmanCode(HTHCn);
for(int?i?=?1;i?<=?n;i++)
{
int?j?=?0;
cout< while(HC[i][j]?!=?‘\0‘)
{
cout< j++;
}
cout< }
string?data;
int?t;
cout<<“\n【1】文件讀取“;
cout<<“\n【2】現(xiàn)在輸入“;?
cout<<“\n請選擇操作:“;
cin>>t;
if(1?==?t)
{
ifstream?infile(“數(shù)據(jù).txt“ios_base::in);
if(!infile.is_open())
{
ofstream?outfile(“數(shù)據(jù).txt“);
outfile.close();
//cerr?<“文件打開失敗!“;
//exit(0);
}
if(infile.peek()==EOF)
{
cout?<“\n無數(shù)據(jù)信息\n“;
return;
}
else
{
getline(infiledata);
}?
}?
if(2?==?t)
{
cout<<“\n請輸入翻譯的數(shù)據(jù):“;
//cin>>data;
fflush(stdin);
getline(cindata);//輸入一行數(shù)據(jù)?
}
cout<<“轉碼如下:\n“;
TraverseData(HTHCdatan);?
}
}
if(2?==?option)
{
if(0?==?flag)
{
cout<<“\n請先構建哈夫曼樹\n“;
return;?
}
string?code;
int?t;
cout<<“\n【1】文件讀取“;
cout<<“\n【2】現(xiàn)在輸入“;?
cout<<“\n請選擇操作:“;
cin>>t;
if(1?==?t)
{
ifstream?infile(“編碼.txt“ios_base::in);
if(!infile.is_open())
{
ofstream?outfile(“編碼.txt“);
outfile.close();
//cerr?<“文件打開失敗!“;
//exit(0);
}
if(infile.peek()==EOF)
{
cout?<“\n無編碼信息\n“;
return;
}
else
{
getline(infile?c
?屬性????????????大小?????日期????時間???名稱
-----------?---------??----------?-----??----
?????文件????????7856??2016-12-07?17:47??哈夫曼編碼譯碼的設計與實現(xiàn)6.0.cpp
?????文件?????1928733??2016-12-10?12:03??哈夫曼編碼譯碼的設計與實現(xiàn)6.0.exe
?????文件??????????12??2016-12-09?10:44??數(shù)據(jù).txt
?????文件??????181760??2016-12-12?13:35??數(shù)據(jù)結構課程設計.doc
?????文件???????16470??2016-12-09?12:28??流程圖.PNG
?????文件???????????0??2016-12-09?10:54??編碼.txt
評論
共有 條評論