Hfm.HC=(HuffmanCode)malloc((n+1)*sizeof(char *));//分配n个字符编码的头指针向量
cd=(char *)malloc(n*sizeof(char));//分配求编码的工作空间 cd[n-1]='\\0';//编码结束符
for(i=1;i<=n;++i)//逐个字符求哈夫曼编码 {
start=n-1;//编码结束符位置
for(c=i,f=Hfm.HT[i].parent;f!=0;c=f,f=Hfm.HT[f].parent)//从叶子到根逆向求编码
{
if(c==Hfm.HT[f].lchild) cd[--start]='0'; else cd[--start]='1'; }
Hfm.HC[i]=(char *)malloc((n-start)*sizeof(char)); strcpy(Hfm.HC[i],&cd[start]);//从cd复制编码到Hfm.HC }
free(cd);//释放工作空间 return Hfm; }
19
Huffman InputHuffman(Huffman Hfm)//输入函数,控制用户输入字符和相应权值 {
int i,n;
printf(\
printf(\chars and weights will be saved in the file :\\hfmTree\\ \\n\ printf(\ scanf(\ if(n<=1)
{printf(\若只有一个数值则无需编码
printf(\
printf(\ scanf(\
Hfm.HT=(HuffmanTree)malloc((2*n)*sizeof(HTNode)); Hfm.c=(char *)malloc((n+1)*sizeof(char)); for(i=1;i<=n;i++) {
printf(\ scanf(\
20
printf(\ scanf(\
Hfm.HT[i].parent=0; Hfm.HT[i].lchild=0; Hfm.HT[i].rchild=0; }
for(;i<=2*n-1;++i) {
Hfm.HT[i].weight=0; Hfm.HT[i].parent=0; Hfm.HT[i].lchild=0; Hfm.HT[i].rchild=0; }
Hfm.length=n; return Hfm; }
Huffman InitHuffman(Huffman Hfm)//初始化哈夫曼数,要求用户输入字符和相应权值
21
{
int n,i,x; FILE *fp;
fp=fopen(\对文件hfmTree以读文本的形式打开 if(fp==NULL) {
Hfm=InputHuffman(Hfm);//调用InputHuffman函数,用户输入字符和相应权值存入哈夫曼数中
fp=fopen(\ fprintf(fp,\ for(i=1;i<=Hfm.length;i++)
fprintf(fp,\ rewind(fp); } else
{printf(\already existed!\\nDo You Want To Make A New One?('Y'or'N')\\n\\n\询问是否重新初始化
scanf(\ if(x=='Y')
{ Hfm=InputHuffman(Hfm);//调用InputHuffman函数,用户输入字符和相应权值存入哈弗曼数中
fp=fopen(\
22
相关推荐: