哈夫曼编码函数程序调用不起来,求大佬指点
#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()哈夫曼编码函数,求大佬指点
#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()哈夫曼编码函数,求大佬指点
...全文
相关推荐
哈夫曼编码 将文本哈夫曼编码并求平均码长
这个代码是用C/C++实现哈夫曼编码并将编码输出。 文本为操作者输入,,对各字符进行频率统计,然后进行哈夫曼编码,并将编码结果输出,同时可求得平均码长。
哈夫曼编码matlab程序
哈夫曼编码matlab程序哈夫曼编码matlab程序哈夫曼编码matlab程序
哈夫曼编码C语言程序
基于概率的哈夫曼编码C语言程序,能对txt文件中的诗句给予其对应的编码
树的应用——哈夫曼编码
一、 实验题目: 树的应用——哈夫曼编码 二、 实验内容: 利用哈夫曼编码进行通信可以大大提高信道的利用率,缩短信息传输的时间,降低传输成本。根据哈夫曼编码的原理,编写一个程序,在用户输入结点权值的基础上求哈夫曼编码。 从键盘输入若干字符及每个字符出现的频率,将字符出现的频率作为结点的权值,建立哈夫曼树,求出各字符的哈夫曼编码。要求: 1. 输出存放哈夫曼树的数组HT的初态和终态; 2. 输出每个字符的哈夫曼编码; 3. 输入由上述若干字符组成的字符串,对电文进行编码并输出; 4. (选作)输入电文的哈夫曼编码,进行译码并输出。
构造哈夫曼树并求哈夫曼编码的算法实现.doc
构造哈夫曼树并求哈夫曼编码的算法实现.doc


