哈夫曼编码函数程序调用不起来,求大佬指点

许攸子 2019-12-13 03:15:36
#include<stdio.h>
#include<stdlib.h>
#define MAXVALUE 32767
int n;
typedef struct{ //哈夫曼树结构体
int weight; //权值
int parent,lc,rc; //双亲节点,左孩子,右孩子
}HNode;
typedef struct{ //哈夫曼编码结构体
int bit[10]; //存放当前结点的哈夫曼编码
int start; //存放哈夫曼编码
}HCode;
HNode HN[10];
HCode HC[10];
void createHNTree(){
int i,j;
int a,b;
int x1,x2;
printf("请输入节点的个数:\n");
scanf("%d",&n);
for(i=1;i<2*n;i++){ //初始化哈夫曼树
HN[i].weight = 0; //权值
HN[i].lc = -1;
HN[i].rc = -1;
HN[i].parent = -1;
}
//输入 n 个叶子结点的权值
for(i=1;i<=n;i++){
printf("请输入第%d个叶结点的权值:\n",i);
scanf("%d",&HN[i].weight );

}
for(i=1;i<n;i++){ //构造哈夫曼树
a = b = MAXVALUE;
x1 = x2 = 0;
for(j=0;j<=n+i;j++){
if(HN[j].weight <a && HN[j].parent == -1){
b = a;
x2 = x1;
a = HN[j].weight ;
x1=j;
}
else if(HN[j].weight <b && HN[j].parent == -1){
b = HN[j].weight ;
x2=j;
}
}
HN[x1].parent =n+i;
HN[x2].parent =n+i;
HN[n+i].weight = HN[x1].weight + HN[x2].weight;
HN[n+i].lc = x1;
HN[n+i].rc = x2;
}
}
void createHC(){
HCode hc;
int i,j,p,c;
for(i=1;i<=n;i++){
hc.start = n;
c=i;
p=HN[c].parent ;
while(p != -1)
{
if(HN[p].lc == c)
hc.bit[hc.start] = 0;
else
hc.bit[hc.start] = 1;
hc.start--;
c = p;
p = HN[c].parent;
}
for(j=hc.start+1;j<=n;j++)
HC[i].bit[j]=hc.bit[j];
HC[i].start=hc.start;
}
}
void printHC(){
int i,j;
for(i=1;i<=n;i++){
for(j=HC[i].start+1;j<=n;j++)
printf("%d",HC[i].bit[j]);
printf("\n");
}
}

int main(void){
createHNTree();
createHC();
printHC();
return 0;
}

编译器没有报错,但是不能调用createHC()哈夫曼编码函数,求大佬指点
...全文
71 1 打赏 收藏 转发到动态 举报
写回复
用AI写文章
1 条回复
切换为时间正序
请发表友善的回复…
发表回复
许攸子 2019-12-17
  • 打赏
  • 举报
回复
滴滴,没人吗?三天了,都没人说话

69,369

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧