数据结构实验七
- 格式:doc
- 大小:427.00 KB
- 文档页数:2
}
for(i=n+1;i<=m;i++){
YLX_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;
}
}
void YLX_outputHuffman(HuffmanTree HT, int m){
if(m!=0){
YLX_outputHuffman(HT,HT[m].LChild);
if(!HT[m].LChild&&!HT[m].RChild)print f("%c\t", HT[m].data);
YLX_outputHuffman(HT,HT[m].RChild);
}
}
void YLX_CrtHuffmanCode(HuffmanTree *ht, HuffmanCode *hc, int n){
char *cd;
int i;
unsigned int c;
int start;
int p;
hc=(HuffmanCode
*)malloc((n+1)*sizeof(char *));
cd=(char * )malloc(n * sizeof(char ));
cd[n-1]='\0';
for(i=1;i<=n;i++){
start=n-1;
for(c=i,p=(*ht)[i].parent;
p!=0; c=p,p=(*ht)[p].parent)
if( (*ht)[p].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(i=1;i<=n;i++)
printf("%c编码为%s\n",(*ht)[i].data,hc[i]);
}
void main() {
HuffmanTree HT;
HuffmanCode HC;
int n;
int m;
printf("*******袁丽湘*******"); printf("\n");
printf("输入叶子节点的个数:" ); scanf("%d",&n);
YLX_CrtHuffmanTree(&HT,n);
m=2*n-1;printf("中序输出哈夫曼树叶子节点:\n");
YLX_outputHuffman(HT,m);
printf("\n");
YLX_CrtHuffmanCode(&HT,&HC,n);
}
六、运行结果截图
七、实验总结与体会
本次实验需要我们进一步掌握二叉树的存储结构和相应算法,掌握霍夫曼树的创建和霍夫曼编码。在本次实验中我觉得对于二叉树的延伸上存在着一些问题,比较难理解。