帮忙看一下这段程序

来源:百度知道 编辑:UC知道 时间:2024/05/11 12:16:44
void Huffmancoding(Huffmantree &HT,Huffmancode &HC,int * w,int n){
if(n<=1)return;
int m,start,c,f,i,s1,s2;
m=2*n-1;
HT=(Huffmantree)malloc((m+1)*sizeof(HTNode));
Huffmantree p;
?for(p=HT+1,i=1;i<=n;++i,++p,++w)*p={*w,0,0,0};
?for(;i<=m;++i,++p)*p={0,0,0,0};
for(i=n+1;i<=m;++i){
select(HT,i-1,s1,s2);
HT[s1].parent=i;HT[s2].parent=i;
HT[i].lchild=s1;HT[i].rchild=s2;
HT[i].weight=HT[s1].weight+HT[s2].weight;
}
HC=(Huffmancode)malloc((n+1)*sizeof(char *));
char * cd;
cd=(char *)malloc(n*sizeof(char));
cd[n-1]='\0';
for(i=1;i<=n;++i){
start=n-1;
for(c=i,f=HT[i].parent;f!=0;c=f,f=HT[f].parent)
if(HT[f].lchild==c)cd[--start]='\0';
else cd[--start]='1';
HC[i]=(char *)malloc((n-start)*sizeof(char));
strcpy(HC[i],&cd[start]);
}free(cd);
}
我打问号那里

?for(p=HT+1,i=1;i<=n;++i,++p,++w)*p={*w,0,0,0};
初始化Huffman表中的第1到第n棵树,*w为对应的权,后面三个0依次表是没有父结点和左右孩子.

?for(;i<=m;++i,++p)*p={0,0,0,0};
初始化Huffman表中的第n+1到第m项,对应的权为0,后面三个0依次表是没有父结点和左右孩子.