永发信息网

哈夫曼编程C程序求解

答案:1  悬赏:0  手机版
解决时间 2021-05-14 00:46
  • 提问者网友:呐年旧曙光
  • 2021-05-13 04:34

要求:

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

单词

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]);
}

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

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

最佳答案
  • 五星知识达人网友:上分大魔王
  • 2021-05-13 06:10

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


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


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


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


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


我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯