📄 haifumanshu.zip.txt
字号:
//哈夫曼编\译码器
# 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 + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -