问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

c++数据结构哈夫曼编码问题

发布网友 发布时间:2022-04-25 16:58

我来回答

1个回答

热心网友 时间:2023-10-20 22:00

我们也有这个实验,只有生成树和编码的后面可以自己做哦!
#include<iostream>
#include<cstring>
using namespace std;
const char ch[] = { 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L',
'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z' };
const double w[] = { 8.19, 1.47, 3.83, 3.91, 12.25, 2.26, 1.71, 4.57, 7.10,
0.14, 0.41, 3.77, 3.34, 7.06, 7.26, 2.89, 0.09, 6.85, 6.36, 9.41, 2.58,
1.09, 1.59, 0.21, 1.58, 0.08 }; //百分比%
const int n = sizeof(w) / sizeof(w[0]);
const double MAX = 10000;
struct element {
double weight; // 字符出现的概率为实数
int lchild, rchild, parent;
};
void HuffmanCode(element huffTree[], int n) {
for (int i = 0; i < n; i++) {
string strc="";
int j = i,t=0; //暂存i,不破坏循环变量
while (huffTree[j].parent != 0) {
if (huffTree[huffTree[j].parent].lchild == j)
strc = '1'+strc;
else
strc = '0'+strc;
j = huffTree[j].parent;
t++;
}
cout << ch[i] << ":"+strc;
for(t=12-t;t>0;t--)cout<<" ";
if(i%6==5)cout<<endl;
}
}
void Select(element huffTree[], int& i1, int& i2) {
double MIN1 = MAX, MIN2 = MAX;
for (int i = 0; i < 2 * n - 1; i++) {
if ((huffTree[i].parent == 0) && (huffTree[i].weight != 0)) {
if ((huffTree[i].weight < MIN1) || (huffTree[i].weight < MIN2)) {
if (MIN1 < MIN2) {
MIN2 = huffTree[i].weight;
i2 = i;
} else {
MIN1 = huffTree[i].weight;
i1 = i;
}
}
}
}
}
void HuffmanTree(element huffTree[], const double w[]) {
for (int i = 0; i < 2 * n - 1; i++) {
huffTree[i].parent = 0;
huffTree[i].lchild = 0;
huffTree[i].rchild = 0;
}
for (int i = 0; i < n; i++)
huffTree[i].weight = w[i];
for (int k = n; k < 2 * n - 1; k++) {
int i1 = -1, i2 = -1;
Select(huffTree, i1, i2);
huffTree[i1].parent = k;
huffTree[i2].parent = k;
huffTree[k].weight = huffTree[i1].weight + huffTree[i2].weight;
huffTree[k].lchild = i1;
huffTree[k].rchild = i2;
}
}
element huffTree[2 * n - 1];
int main() {
HuffmanTree(huffTree, w);
HuffmanCode(huffTree, n);
return 0;
}
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
刺身怎么下刀? 养老护理员资格证的等级是什么 养老护理员证有几级啊 工行手机银行如何提前还房贷 工行手机银行提前还房贷操作 工行手机银行app可以提前房贷还款吗_工行手机银行提前还房贷步骤... 金龙八部是什么时出版的 天龙八部陈浩民那一年出版的 金庸作品集:天龙八部图书信息 puum243请到柜面、网银或手机银行修改密码? 超重被交警抓一般怎么处理 qq背景墙图片带(我非良人)4个字的,求图, 一道关于求哈夫曼编码的数据结构题,求解答 数据结构哈夫曼编码问题,请高手帮忙 哈夫曼树及哈夫曼编码的C程序实现(数据结构题) 算法与数据结构哈夫曼编码及应用 数据结构,第二题,哈夫曼编码, 过程详细说明一下,谢谢 一个关于数据结构的问题,有关哈夫曼编码的,解答看不懂,求解答,谢谢! 数据结构之哈夫曼编码 求解,关于数据结构的哈夫曼编码的问题 利用 数据结构 实现 哈夫曼编码/译码实现 数据结构中的哈夫曼编码 哈夫曼编码的原理是什么? 氢气球到底是氢气还是氮气 氢气球一般能挺多久 氢气球是什么做得? 世界上第一个也是最原始的氢气球是谁制作的? 氢气球有毒吗? 氢气球的是如何被研制出来的? 氢气球原理 谁发明了氢气球? 数据结构(C语言)-哈夫曼编码求助!! QQ个性背景墙的图片。要多点类似这样的。反正只要好看就可以。推荐多点哦。 数据结构哈夫曼编码流程图 哈夫曼编/译码器 数据结构实践题 C语言,数据结构,哈夫曼编/译码器 用这个做QQ背景墙,能反映出他是个怎样的人,求解 vivo手机通话录音保存在哪里可以找到 vivo手机怎么找电话录音? 用vivo手机打电话时一边打一边录音,但是找不到录音的音频文件? 电话的通话录音,录完后到那里去找出来重放啊? 美元指数上涨现货黄金就会下降,为什么黄金和美元指数一直呈现负相关的关系呢? vivo Xm手机通话录音在哪里存放? 美元指数和黄金T+D有怎样的关系,比如,美元指数98.2对应黄金多少元每克 美元指数与外汇黄金什么关系 美元指数对现货黄金和白银有什么影响 如何理解美元指数与黄金的负相关的关系 美元指数和黄金的走势是成什么关系的,什么情况下会同涨或者同跌? 美元指数和黄金价格的关系 我把银行卡绑在抖音极速版为何零钱提不到银行卡里? 银行入驻抖音有哪些好处?