haifumanshu.zip.txt

来自「任务 :建立最优二叉树函数 要求:可以建立函数输入二叉树」· 文本 代码 · 共 81 行

TXT
81
字号
//哈夫曼编\译码器
# define max 50 
> struct a 
> { 
> int weight; 
> int parent,lchild,rchild; 
> }; 
> struct b 
> { 
> char cd[max]; 
> int start; 
> }; 
> main() 
> { 
> struct a ht[2*max]; 
> struct b hcd[max],d; 
> int i,j,k,n,c,s1,s2,m1,m2,f; 
> printf("shu ru n: 
"); 
> scanf("%d",&n); 
> for(i=1;i<=n;i++) 
> { 
> printf("shu ru quan zhi :"); 
> scanf("%d",&ht[i].weight); 
> ht[i].parent=0; 
> } 
> for(;i<=2*n-1;i++) 
> ht[i].parent=ht[i].lchild=ht[i].rchild=0; 
> for(i=n+1;i<=2*n-1;i++) 
> { 
> m1=m2=30000; 
> s1=s2=0; 
> for(k=1;k<=i-1;k++) 
> { 
> if(ht[k].parent==0 && ht[k].weight<m1) 
> { 
> m2=m1; 
> s2=s1; 
> m1=ht[k].weight; 
> s1=k; 
> } 
> else if(ht[k].parent==0 && ht[k].weight<m2) 
> { 
> m2=ht[k].weight; 
> s2=k; 
> } 
> } 
> ht[s1].parent=ht[s2].parent=i; 
> ht[i].lchild=s1; 
> ht[i].rchild=s2; 
> ht[i].weight=ht[s1].weight+ht[s2].weight; 
> } 
> for(i=1;i<=n;i++) 
> { 
> d.start=n-1; 
> c=i; 
> f=ht[i].parent; 
> while(f) 
> { 
> if(ht[f].lchild==c)d.cd[--d.start]='0'; 
> else d.cd[--d.start]='1'; 
> c=f; 
> f=ht[f].parent; 
> } 
> hcd[i]=d; 
> } 
> printf("shu chu ha fu bian ma 
"); 
> for(i=1;i<=n;i++) 
> { 
> printf("%d ",ht[i].weight); 
> for(k=hcd[i].start;k<n-1;k++) 
> printf("%c",hcd[i].cd[k]); 
> printf(" 
"); 
> } 
> } 
> 
>

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?