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

哈夫曼树的建立及应用

发布网友 发布时间:2022-05-06 21:50

我来回答

2个回答

热心网友 时间:2023-09-22 08:46

#include<iostream.h>
#include<iomanip.h>
const int n=8;
const int m=2*n-1;
struct tree
{
float weight;
int parent;
int lch,rch;
};
struct codetype
{
int bits[n+1];
int start;
char ch;
};
tree hftree[m+1];
struct codetype code[n+1];
void creathuffmantree()
{
int i,j,p1,p2;
float s1,s2;
for(i=1;i<=m;i++)
{
hftree[i].parent=0;
hftree[i].lch=0;
hftree[i].rch=0;
hftree[i].weight=0; }
cout<<"输入"<<n<<"个权值"<<endl;
for(i=1;i<=n;i++)
cin>>hftree[i].weight;
for(i=n+1;i<=m;i++)
{
p1=p2=0;
s1=s2=32767;
for(j=1;j<=i-1;j++)
if(hftree[j].parent==0)
if(hftree[j].weight<s1)
{
s2=s1;
s1=hftree[j].weight;
p2=p1;
p1=j;
}
else
if(hftree[j].weight<s2)
{
s2=hftree[j].weight;p2=j;
}
hftree[p1].parent=i;
hftree[p2].parent=i;
hftree[i].lch=p1;
hftree[i].rch=p2;
hftree[i].weight=hftree[p1].weight+hftree[p2].weight;
}
}void huffcode()
{
codetype cd;
int c,p;
for(int i=1;i<=n;i++)
{
cd.start=n+1;
cd.ch=96+i;
c=i;
p=hftree[i].parent;
while(p!=0)
{
cd.start--;
if(hftree[p].lch==c)cd.bits[cd.start]=0;
else cd.bits[cd.start]=1;
c=p;
p=hftree[p].parent;
}
code[i]=cd;
}
for(i=1;i<=n;i++)
{
cout<<"字符"<<code[i].ch<<"的权值为:"<<hftree[i].weight<<setw(5)<<"编码为:";
for(int j=code[i].start;j<=n;j++)
cout<<code[i].bits[j]<<" ";
cout<<endl;
}}void trancode()
{
int i=m;char b;
cout<<"请输入一串二进制编码(0、1以外的数结束)";
cin>>b;
while((b=='0')||(b=='1'))
{
if(b=='0')i=hftree[i].lch;
else i=hftree[i].rch;
if(hftree[i].lch==0)
{
cout<<code[i].ch;
i=m;
}
cin>>b;
}}void main()
{
creathuffmantree();
huffcode();
trancode();
}

热心网友 时间:2023-09-22 08:46

给你个我写的哈夫曼函数:
void HuffmanTree(HuffmanTree &HT, int * w, int n)
{
//w 存放n 个字符的权值(均>0),构造赫夫曼树HT
if (n<=1) return;
m=2* n-1;
HT=(HuffmanTree)malloc(m+1) * sizeof(HTNode); //分配存储空间
//用给定的n个权值,构造n棵只有一个根结点的二叉树
for (p=1, i=1, j=0; i<=n; ++i, ++p, ++j)
HT[p]={ w[j], 0, 0, 0}; //HT[0]未用
//按构造哈夫曼树的步骤2、3、4,建哈夫曼树
for (; i<m; ++i;) {
//在HT[1..i-1] 选择parent为0且weight最小的两个结点,
//其序号分别为s1和s2。
Select(HT, i-1, s1, s2);
HT[s1]. parent =i; HT[s2].parent=i; //HT[i]存放新子树的根结点,
HT[i].lchild=s1; HT[i].rchild=s2;
HT[i].weight=HT[s1].weight+HT[s2].weight; }
}
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
景德镇书香蔓城多少钱一平方? 银盛泰书香蔓城基本信息 景德镇书香蔓城是什么装修? 卫生间风水和健康的关系是什么? 卫生间窗户风水大忌 8种危害健康可怕浴室风水 易惹祸的八种卫生间格局,快来看看吧! 我最好朋友的婚礼 演员表 我最好朋友的婚礼职员表 浙大夏令营是干什么的 湛江太平郑氏起源哪里? 北京白马时光文化发展有限公司的核心团队 求c++程序 哈夫曼编码的实现与应用 哪些场所要设置人防工程? 计算机专业大学排名 我学做云吞皮,也按照配方做的,但是为什么云吞皮那么硬的,什么原因???&#39;&#39;&#39;&#39;&#39; 为什么赐郑和姓“郑”,而不是其它的字? 考研率具体是什么? 什么是霍夫曼编码 云吞皮怎么做才筋道 爱企查可以查电话号码吗 郑姓的历史发展 恳切寻人:姓名:张朝龙 生日:1983 性别:男 星座:双鱼座 血型:B型 关于郑姓氏的由来资料 寻人,张朝龙,安徽六安人,安徽理工大学毕业,83年的,在南通搞建筑工作 哈夫曼编码 急需!满意即追加分 谢谢了 厨界小白也能学会,馄饨皮的另类做法,买了馄饨皮却发现自己不会包馄饨怎么办? “郑”姓氏由来? 【好就业】学历不高学什么技术比较好,初中学历学什么技术最好,现代社会学什么最好,中专学校联 如何删除苹果自带的app 怎样发布微信投票任务?需要注意什么问题? 1、软件压缩/解压缩软件 Szip(Huffman算法及应用) 湖北有哪些三类医科大学 2014 中国农大考研 自主命题难度加大了,参考以前农大自己命题的有帮助吗? 你好QQ背景怎么换 微信投票任务发布平台?怎么办啊,怎么能提高上去票? 内蒙古工业大学与内蒙古科技大学哪个好啊 230平方分米等于多少平方米最简分数 230分米=()厘米 馄饨皮里加什么才有筋 创世嘉无人机,我用vivo手机扫二维码不能用? 2米3等于多少毫米 230厘米等于多少分米 什么样的建筑要做人防设计? 什么建筑需要设置人防 钩角 打一成语 被子:200*230cm,请问等于多少米? 建筑时勾角计算方法,详解 算命先生说的勾角心是指什么? 230cm是多少米