主题:请帮我解释一下这个程序的意思!谢谢各位!
[em18] 这是创建哈夫曼树还有哈夫曼编码的一个程序 但是很多地方自己看不懂 请各位帮忙看看解释一下 谢谢了[em2] 麻烦各位拉
#include <stdio.h>
#define MAX 1000
#define MAXSYMBS 30 (请问一下这是不是编码的最大位数)
#define MAXNODE 59 (请问一下这是不是初始的最大的结点数)
typedef struct
{
int weight; (是不是权值)
int flag; (看不懂)
int parent; (是不是双亲节点的下标)
int lchild;
int rchild;
}huffnode;
typedef struct
{
int bits[MAXSYMBS]; (不懂)
int start; (是不是编码的起始下标)
}huffcode;
main()
{
huffnode huff_node[MAXNODE]; (?)
huffcode huff_code[MAXSYMBS],cd; (?)
int i,j,m1,m2,x1,x2,n,c,p;
clrscr();
printf("please input the leaf num :\n"); (?)
scanf("%d",&n);
for(i=0;i<2*n-1;i++) (这个循环里做的是不是初始哈夫曼树 )
{
huff_node[i].weight=0;
huff_node[i].parent=0;
huff_node[i].flag=0; (?)
huff_node[i].lchild=-1; (?)
huff_node[i].rchild=-1; (?)
}
printf("please input the weight of every leaf\n"); (?)
for(i=0;i<n;i++)
scanf("%d",&huff_node[i].weight);
/* creat huff_tree*/
for(i=0;i<n-1;i++) (这个循环基本上看不懂)
{
m1=m2=MAX; (?)
x1=x2=0; (?)
for(j=0;j<n+i;j++)
{
if (huff_node[j].weight<m1&&huff_node[j].flag==0) (这个if语句下的也不懂)
{
m2=m1; (?)
x2=x1; (?)
m1=huff_node[j].weight; (?)
x1=j; (?)
}
else if (huff_node[j].weight<m2&&huff_node[j].flag==0) (?)
{
m2=huff_node[j].weight; (?)
x2=j; (?)
}
}
huff_node[x1].parent=n+i; (?)
huff_node[x2].parent=n+i; (?)
huff_node[x1].flag=1; (?)
huff_node[x2].flag=1;
huff_node[n+i].weight=huff_node[x1].weight+huff_node[x2].weight;
huff_node[n+i].lchild=x1;
huff_node[n+i].rchild=x2;
}
/*creat huff_code*/
for(i=0;i<n;i++)
{
cd.start=n; (?)
c=i; (?)
p=huff_node[c].parent; (?)
while(p!=0) (?)
{
if(huff_node[p].lchild==c)
cd.bits[cd.start]=0;
else
cd.bits[cd.start]=1;
cd.start=cd.start-1; (?)
c=p; (?)
p=huff_node[p].parent; (?)
}
cd.start++;
for(j=cd.start;j<=n;j++) (?)
huff_code[i].bits[j]=cd.bits[j]; (?)
huff_code[i].start=cd.start; (?)
}
/*input huff_code*/
puts("The Hafman code are:");
for(i=0;i<n;i++)
{
for(j=huff_code[i].start;j<=n;j++)
printf("%10d",huff_code[i].bits[j]);
printf("\n");
}
puts("Press any key to quit...");
getch();
}
#include <stdio.h>
#define MAX 1000
#define MAXSYMBS 30 (请问一下这是不是编码的最大位数)
#define MAXNODE 59 (请问一下这是不是初始的最大的结点数)
typedef struct
{
int weight; (是不是权值)
int flag; (看不懂)
int parent; (是不是双亲节点的下标)
int lchild;
int rchild;
}huffnode;
typedef struct
{
int bits[MAXSYMBS]; (不懂)
int start; (是不是编码的起始下标)
}huffcode;
main()
{
huffnode huff_node[MAXNODE]; (?)
huffcode huff_code[MAXSYMBS],cd; (?)
int i,j,m1,m2,x1,x2,n,c,p;
clrscr();
printf("please input the leaf num :\n"); (?)
scanf("%d",&n);
for(i=0;i<2*n-1;i++) (这个循环里做的是不是初始哈夫曼树 )
{
huff_node[i].weight=0;
huff_node[i].parent=0;
huff_node[i].flag=0; (?)
huff_node[i].lchild=-1; (?)
huff_node[i].rchild=-1; (?)
}
printf("please input the weight of every leaf\n"); (?)
for(i=0;i<n;i++)
scanf("%d",&huff_node[i].weight);
/* creat huff_tree*/
for(i=0;i<n-1;i++) (这个循环基本上看不懂)
{
m1=m2=MAX; (?)
x1=x2=0; (?)
for(j=0;j<n+i;j++)
{
if (huff_node[j].weight<m1&&huff_node[j].flag==0) (这个if语句下的也不懂)
{
m2=m1; (?)
x2=x1; (?)
m1=huff_node[j].weight; (?)
x1=j; (?)
}
else if (huff_node[j].weight<m2&&huff_node[j].flag==0) (?)
{
m2=huff_node[j].weight; (?)
x2=j; (?)
}
}
huff_node[x1].parent=n+i; (?)
huff_node[x2].parent=n+i; (?)
huff_node[x1].flag=1; (?)
huff_node[x2].flag=1;
huff_node[n+i].weight=huff_node[x1].weight+huff_node[x2].weight;
huff_node[n+i].lchild=x1;
huff_node[n+i].rchild=x2;
}
/*creat huff_code*/
for(i=0;i<n;i++)
{
cd.start=n; (?)
c=i; (?)
p=huff_node[c].parent; (?)
while(p!=0) (?)
{
if(huff_node[p].lchild==c)
cd.bits[cd.start]=0;
else
cd.bits[cd.start]=1;
cd.start=cd.start-1; (?)
c=p; (?)
p=huff_node[p].parent; (?)
}
cd.start++;
for(j=cd.start;j<=n;j++) (?)
huff_code[i].bits[j]=cd.bits[j]; (?)
huff_code[i].start=cd.start; (?)
}
/*input huff_code*/
puts("The Hafman code are:");
for(i=0;i<n;i++)
{
for(j=huff_code[i].start;j<=n;j++)
printf("%10d",huff_code[i].bits[j]);
printf("\n");
}
puts("Press any key to quit...");
getch();
}