资源简介
本程序是c++语言利用数据结构中的树来实现二院哈夫曼编译码,支持任意字符串的编译码,直接用visual studio打开运行即可。
代码片段和文件信息
#include
#include
using namespace std;
struct HNode
{
int weight; //结点权值
int parent; //双亲指针
int LChild; //左孩子指针
int RChild ; //右孩子指针
};
struct HCode
{
char data;
char code[100];
};
class Huffman
{
private:
HNode* HTree; //Huffman树
HCode* HCodeTable; //Huffman编码表
char str[1024]; //输入的原始字符串
char leaf[256]; //叶子节点对应的字符
int a[256]; //记录每个出现的字符的个数
public:
int n; //叶子节点数
void init(); //初始化
void CreateHTree(); //创建huffman树
void CreateCodeTable(); //创建编码表
void Encode(char *d); //编码
void Decode(char *s char *d); //解码
void print(int iint m); //打印Huffman树
void SelectMin(int &x int &y int s int e );//选择两个最小的节点
void Reverse(char* s); //逆转编码
~ Huffman();//析构函数
};
void Huffman::init()
{
int nNum[256]= {0}; //记录每一个字符出现的次数
int ch = cin.get();
int i=0;
while((ch!=‘\r‘) && (ch!=‘\n‘))
{
nNum[ch]++; //统计字符出现的次数
str[i++] = ch; //记录原始字符串
ch = cin.get(); //读取下一个字符
}
str[i]=‘\0‘;
cout<<“各个字符出现的次数:“< n = 0;
for ( i=0;i<256;i++)
{
if (nNum[i]>0) //若nNum[i]==0说明该字符未出现
{
leaf[n] = (char)i;
a[n] = nNum[i];
n++;
cout<<(char)i<<“-“< }
}
cout< }
void Huffman::CreateHTree()
{
HTree = new HNode [2*n-1]; //根据权重数组a[0..n-1] 初始化Huffman树
for (int k = 0; k < n; k++)
{
HTree[k].weight = a[k];
HTree[k].LChild = HTree[k].RChild = HTree[k].parent = -1;
}
int x y;
for (int i = n; i < 2*n-1; i++) //开始建Huffman树
{
SelectMin(x y 0 i); //从1~i中选出两个权值最小的结点
HTree[x].parent = HTree[y].parent = i;
HTree[i].weight = HTree[x].weight+ HTree[y].weight;
HTree[i].LChild = x;
HTree[i].RChild = y;
HTree[i].parent = -1;
}
}
void Huffman::SelectMin(int &x int &y int s int e )
{
int i;
for ( i=s; i<=e;i++)
if (HTree[i].parent == -1)
{
x =y= i; break; //找出第一个有效权值x,并令y=x
}
for ( ; i if (HTree[i].parent == -1) //该权值未使用过
{
if ( HTree[i].weight< HTree [x].weight)
{
相关资源
- c++24期网盘链接
- C++ Primer 第六版 书上程序及课后习题
- 集合的并交差运算
- 免费的LeetCode-cpp题解(C++版本)大全
- Ubuntu下的扩展卡尔曼滤波EKF程序(C
- 2019华为软件精英挑战赛C++ 源码实现
- 基于遗传算法的带容量限制的P-media
- C++实现小游戏flappy bird
- C++builder实现计算器
- MFC 2010编写 C++ 求1元4次方程解,含1元
- c++版创建并输出二叉树完整代码
- c++练习题2015
- 最新传智播客C/C++第五期完整视频 R
- 影碟出租系统C++源代码
- C++&CLR 编写 Windows 窗体应用程序
- 用c语言写的8数码游戏
- ue4,c++平面最小封闭区域识别
- vs2013 c++串口助手源码
- c++21点游戏
- 蛮力法求解旅行商问题C++
- 理发师睡觉问题
- 常用的VC界面模板
- 20多个常用的Hash算法C++ 实现
- C++仿360新界面源代码
- 遗传、禁忌、模拟退火解背包问题
- C++语言程序设计 郑莉 第四版 课后题
- 蚁群算法C++版
- C++开发精灵对战小游戏
- C++与js相互调用
- 使用Qt做的数据管理系统
评论
共有 条评论