#include<stdio.h> #define MAX 21 typedef struct { char data; int weig,parent,left,right; }huffn; typedef struct { char cd[MAX]; int start; }huffc; int main() { huffn ht[2*MAX]; huffc hcd[MAX],d; int i,k,j,f,h,r,n=0,c,m1,m2; printf("请输入元素(1->%d:",MAX-1); scanf("%d",&n); if(n>MAX-1||n<1) return 1; for(i=0;i<n;i++) { fflush(stdin); printf("第%d个元素->\n\t结点值:",i+1); scanf("%c",&ht[i].data); printf("权重"); scanf("%d",&ht[i].weig); } for(i=0;i<2*n-1;i++) ht[i].parent=ht[i].left=ht[i].right=0; for(i=n;i<2*n-1;i++) { m1=m2=0x7fff; j=r=0; for(k=0;k<i;k++) if(ht[k].parent==0) if(ht[k].weig<m1){ m2=m1; r=j; m1=ht[k].weig; j=k; } else if(ht[k].weig<m2){ m2=ht[k].weig; r=k; } ht[j].parent=i; ht[r].parent=i; ht[i].weig=ht[j].weig+ht[r].weig; ht[i].left=j; ht[i].right=r; } for(i=0;i<n;i++) { d.start=n; c=i; f=ht[i].parent; while(f!=0) { if(ht[f].left==c) d.cd[--d.start]=‘0‘; else d.cd[--d.start]=‘1‘; c=f;f=ht[f].parent; } hcd[i]=d; } printf("输出huffman编码:\n"); for(i=0;i<n;i++) { printf("%c",ht[i].data); for(k=hcd[i].start;k<n;k++) printf("%c",hcd[i].cd[k]); printf("\n"); } }
原文:https://www.cnblogs.com/huangjiaxin/p/11002773.html