全文预览

哈夫曼树的构造和应用

上传者:梦&殇 |  格式:doc  |  页数:10 |  大小:322KB

文档介绍
,ht,n); /*调用函数*/Р }Рvoid huffmancode(htnode ht[],int n)/*对具有n个叶子结点的哈夫曼树ht,求所有叶子结点的哈夫曼编码并输出*/Р{int i,j,c,p,m,k;Р char ch[100];Р hcodetype cd[100];Р for(i=0;i<n;i++)Р {c=i;j=maxbit;Р doР {j--;Р?p=ht[c].parent;Р?if(ht[p].lchild==c)Р cd[i].bit[j]=0;Р?elseР cd[i].bit[j]=1;Р?c=p;Р?} while(p!=0);Р cd[i].start=++j;Р }Р for(i=0;i<n;i++)Р {printf("data:%c bits:",ht[i].data);Р for(j=cd[i].start;j<maxbit;j++)Р printf("%d",cd[i].bit[j]);Р printf("\n");Р }Р }Рvoid huffmandecode(hcodetype cd[],htnode ht[],int n)Р{ int i,c,p,b;Рint endflag=-1;Рi=2*n-2;Рscanf("%d",&b);Рprintf("译码的结果如下:\n");Рwhile(b!=endflag)Р{ if(b==0) i=ht[i].lchild;Р else i=ht[i].rchild;Р if(ht[i].lchild==0)Р{ printf("%c",ht[i].data);Р i=2*n-2;Р Р}Рscanf("%d",&b);Р}Рprintf("\n");Рif((ht[i].lchild!=0)&&(i!=2*n-2))Р printf("\n ERROR\n");Р}

收藏

分享

举报
下载此文档