资源简介

哈夫曼编码与译码的c++实现,主要功能哈夫曼树的创建,可把数据转换为编码后存入文件,也可以对文件中的信息进行编码与译码,代码清晰整洁,源码内有详细的注释可辅助理解,功能符合课程设计的要求,并加以扩展。

资源截图

代码片段和文件信息

/*更新*/ 

/*从文件读取数据*/ 
/*
测试数据
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;//节点的权值
int parentlchildrchild;//节点的双亲,左孩子,右孩子的下标 
}HtNode*HuffmanTree;

typedef struct Node 
{
char data;
struct Node *next;
}Node*DeNode;

void menu(); 
//创建哈夫曼树HTn个数据 
bool CreatHuffmanTree(HuffmanTree &HTint n);

//在哈夫曼树HT中选择两个双亲域为0的权值最小的两个节点 
void Select(HuffmanTree &HTint rangint &min1int &min2);

//根据哈夫曼树求哈夫曼编码
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<<“输入叶子结点的个数:“;
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】现在输入“; 
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(infiledata);


if(2 == t)
{
cout<<“\n请输入翻译的数据:“;
//cin>>data;
fflush(stdin);
getline(cindata);//输入一行数据 
}
cout<<“转码如下:\n“;
TraverseData(HTHCdatan); 
}
}
if(2 == option)
{
if(0 == flag)
{
cout<<“\n请先构建哈夫曼树\n“;
return; 
}
string code;
int t;
cout<<“\n【1】文件读取“;
cout<<“\n【2】现在输入“; 
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  哈夫曼编码译码的设计与实现6.0.cpp
     文件     1928733  2016-12-10 12:03  哈夫曼编码译码的设计与实现6.0.exe
     文件          12  2016-12-09 10:44  数据.txt
     文件      181760  2016-12-12 13:35  数据结构课程设计.doc
     文件       16470  2016-12-09 12:28  流程图.PNG
     文件           0  2016-12-09 10:54  编码.txt

评论

共有 条评论