永发信息网

哈夫曼编程C程序求解

答案:1  悬赏:0  手机版
解决时间 2021-05-14 00:46

要求:

编写一个程序,构造一棵哈夫曼树,输出对应的哈夫曼编码,并对下表所示的数据进行验证。

单词

The

Of

a

to

and

in

that

he

is

at

on

for

His

are

be

出现频度

1192

677

541

518

462

450

242

195

190

181

174

157

138

124

123

CreateHT 构造哈夫曼树。

main CreateHCode 构造哈夫曼编码。

DispHCode 输出哈夫曼编码。


#include <stdio.h>
#include <string.h>
#include <stdlib.h>

typedef struct
{
ElemType data;
int weight;
int parent,lchild,rchild;
}HTNode;

void CreateHT(HTNode ht[],int n)
{
int i,j,k,lnode,rnode;
float min1,min2;
for(i=0;i<2*n-1;i++)
ht[i].parent=ht[i].lchild=ht[i].rchild=-1;
for(i=n;i<2*n-1;i++)
{min1=min2=32767;
lnode=rnode=-1;
for(k=0;k<=i-1;k++)
if(ht[k].parent==-1)
{
if (ht[k].weight<min1)
{min2=min1;rnode=lnode;
min1=ht[k].weight;lnode=k;
}
else if (ht[k].weight<min2)
{min2=ht[k].weight;rnode=k;}
}
ht[lnode].parent=i;ht[rnode].parent=i;
ht[i].weight=ht[lnode].weight+ht[rnode].weight;
ht[i].lchild=lnode;ht[i].rchild=rnode;
}
}


typedfef struct
{
char cd[N];
int start;
}HCode;

void CreateHCode(HTNode ht[],HCode hcd[],int *w,int n)
{
int i,f,c;
Hcode hc;
for(i=0;i<n;i++)
{
hc.start=n;c=i;
f=ht[i].parent;
while (f!=-1)
{
if (ht[f].lchild==c)
hc.cd[hc.start--]='0';
else
hc.cd[hc.start--]='1';
c=f;f=ht[f].parent;
}
hc.start++;
hcd[i]=hc;
}
}

void main()
{

int w[100],n,i;
scanf("%d",&n);
for(i=0;i<n;i++)
scanf("%d",&w[i]);
CreateHCode(ht,hc,w,n);
for(i=1;i<n+1;i++)
printf("%d\t%s\n",w[i-1],hc[i]);
}

以上是我自己根据要求写的一个程序,不知道问题出在哪里。提示有错误。主函数那块不知道是不是这么写。

麻烦高手帮我看看整个程序有什么小问题之类的。感谢。

最佳答案

.......不要直接抄算法书上的代码


ElemType只是说明可以是任意类型的数据,并不是一个数据类型


在主函数里给CreateHCode传的参数给本没有定义


你要先理解算法,然后自己写出来,算法书上只是提供算法,所以不要直接抄


如果是我误会了你那就不好意思了哈,不过自己写怎么可能写出ElemType这种数据类型呢,呵呵


我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
暗恋别人咋表白才会成功几率大
手机移动梦网书城维护时间
不是情侣空间怎么积分快
临澧县吕炳炎诊所地址是什么,有没有知道的
奋斗中高强的死告诉我们了什么
我是一九八九年九月二十,想占卜我的婚姻
炫舞有防沉迷了、那刷团任务有事吗?
安徽宿州的房子还能便宜吗?现在都3800左右。
戒烟有什么好办法吗?
步入小学祝福语,母亲节写什么祝福语有古诗
祁阳县优等生活馆(永州祁阳莲子塘店)在什么地
QQ三国裤子这个属性好吗? 很重要吗?
什么样的燃油添加剂好?
步步高 音乐手机宋慧乔代言青花瓷的那一季的
迈克尔杰克逊的,就是这样,有影碟卖吗
推荐资讯
隆回县比德文电动车隆回专卖店怎么去啊,谁知
松岗沙水那里有网吧?
双色球又有大奖了2.59亿啊
一本叫《午夜炼YU》的小说
U盘都有多大的啊?
集团营销和区域营销有啥区别?
化学反映类型分哪些
大连大显手机DX-c199的滑盖排线换个要多少钱
单选!顾客在购买某种产品时所追求的效用和利
新化县桥东农贸大市场(上梅东路)这个地址在什
哪里有不错的室内设计专业的学校?
精神是万能的,没有精神是万万不能的。这一观
正方形一边上任一点到这个正方形两条对角线的
阴历怎么看 ?