没有合适的资源?快使用搜索试试~ 我知道了~
首页【C++】根据输入的字符串生成哈夫曼树, 并进行哈夫曼编码和解码
/********************************************************************** * Description : create huffmanTree and huffmanCode by input string * and decode a 0、1 sequence by huffmanCode * Author : wandugu * DATE : 2020-05-02 ************************************
资源详情
资源评论
资源推荐
【【C++】根据输入的字符串生成哈夫曼树】根据输入的字符串生成哈夫曼树, 并进行哈夫曼编码和并进行哈夫曼编码和
解码解码
/**********************************************************************
* Description : create huffmanTree and huffmanCode by input string
* and decode a 0、1 sequence by huffmanCode
* Author : wandugu
* DATE : 2020-05-02
*********************************************************************/
#include
#include
#include
#include
#include
using namespace std;
const int INPUT_LEN_MAX = 32; // 允许的输入的最大的节点个数,
const int CODE_NUM_MAX = 2 * INPUT_LEN_MAX - 1; // 最大哈夫曼编码长度
using HuffmanTree = struct {
float weight = 0.0f;
char data = '0';
int lChild = -1;
int rChild = -1;
int parent = -1;
int index = 0;
};
HuffmanTree huffmanTree[CODE_NUM_MAX]; // huffmanTree:构造的Huffman树
using codeType = struct {
char bits[INPUT_LEN_MAX] = ""; // 编码数组位串,其中N_MAX为运行的最大叶子数目
int bitLen = 0; // 每个节点的Huffman编码长度
char data = 127; // 结点值, 默认为ASCII最大值
};
codeType huffmanCode[INPUT_LEN_MAX]; // huffmanCode: 存放Huffman编码的数组
int inputStrLen, codeNum; // 全局变量, 用于存放实际叶子的数目和实际Huffman树的结点数
bool cmpByTreeWeight(const HuffmanTree &tree1, const HuffmanTree &tree2);
bool cmpByTreeIndex(const HuffmanTree &tree1, const HuffmanTree &tree2);
bool cmpByCodeData(const codeType &code1, const codeType &code2);
bool checkInputStr(const string &toCheckStr);
void reverse(codeType &toRevertCode);
void CreatHuffmanTree(HuffmanTree tree[]) {
char inputStr[INPUT_LEN_MAX] = "";
/* Initialization the huffmanTree */
for (int i = 0; i < CODE_NUM_MAX; i++) {
tree[i].index = i;
}
/* Input name and weights */
cout <> inputStr;
cout << "Your input string is: " << inputStr << endl;
inputStrLen = strlen(inputStr);
codeNum = 2 * inputStrLen - 1;
for (int i = 0; i < inputStrLen; i++) {
tree[i].data = inputStr[i];
}
cout << "Please input " << inputStrLen << " float number as the corresponding weights:" << endl;
for (int i = 0; i > tree[i].weight;
}
cout << endl << "The corresponding weights are: ";
for (int i = 0; i < inputStrLen; i++) {
cout.setf(ios::fixed);
cout << setprecision(2) << tree[i].weight;
if (i != inputStrLen - 1) {
weixin_38640674
- 粉丝: 2
- 资源: 960
上传资源 快速赚钱
- 我的内容管理 收起
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
会员权益专享
最新资源
- RTL8188FU-Linux-v5.7.4.2-36687.20200602.tar(20765).gz
- c++校园超市商品信息管理系统课程设计说明书(含源代码) (2).pdf
- 建筑供配电系统相关课件.pptx
- 企业管理规章制度及管理模式.doc
- vb打开摄像头.doc
- 云计算-可信计算中认证协议改进方案.pdf
- [详细完整版]单片机编程4.ppt
- c语言常用算法.pdf
- c++经典程序代码大全.pdf
- 单片机数字时钟资料.doc
- 11项目管理前沿1.0.pptx
- 基于ssm的“魅力”繁峙宣传网站的设计与实现论文.doc
- 智慧交通综合解决方案.pptx
- 建筑防潮设计-PowerPointPresentati.pptx
- SPC统计过程控制程序.pptx
- SPC统计方法基础知识.pptx
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功
评论5