当年数据结构与算法的实验报告,难了我好几天,现在分享给华理的学弟学妹们吧。没有注释,但是确实是我自己写的。
#include #include #include typedef struct { int weight; int parent; int Lchild; int Rchild; }HTNode,*HuffmanTree; void select(HuffmanTree *ht,int n,int *s1,int *s2) { int i,min1=100,min2=100; for(i=1,*s1=0,*s2=0;i if((*ht)[i].weight *s2=i; min2=(*ht)[i].weight; } } } } void CrtHuffmanTree(HuffmanTree *ht,char ***hc,int *w,int n) { int m,i,s1,s2,start,c,p;char *cd; m=2*n-1; *ht=(HuffmanTree)malloc((m+1)*sizeof(HTNode)); for(i=1;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';//左分支标0 else cd[--start]='1';//右分支标1 } (*hc)[i]=(char*)malloc((n-start)*sizeof(char)); strcpy((*hc)[i],&cd[start]); } free(cd); } int main() { HuffmanTree *ht;char **hc;int a,i; int w[10]; printf("请输入叶子节点个数:"); scanf("%d",&a); for(i=1;i printf("第%d个叶子节点的哈夫曼编码为:",i); puts(hc[i]); } return 0; }
|