📄 haffum.txt
字号:
#include "stdio.h"
#include "stdlib.h"
typedef struct{ int node,weight,parent,lchild,rchild;}HTNode,HuffmanTree;
void HuffmanCoding(HuffmanTree *HT,int *w,int n)
{int S1,S2;int f,c,start,m,i,k; char *cd; int r;int j;HuffmanTree *p;
m=2*n-1;
if(n<=1) return;
HT=(HuffmanTree *)malloc((m)*sizeof(HTNode));
p=HT;
for(i=0;i<n;++i,++p){(*p).node=i;(*p).weight=*(w+i);(*p).parent=0;(*p).lchild=0;(*p).rchild=0;};
for(i=n;i<m;++i,++p){(*p).node=i;(*p).weight=0;(*p).parent=0;(*p).lchild=0;(*p).rchild=0;};
p=HT;
printf("\n");
printf("this is the original data.");
printf("\n");
printf(" node,weight,parent,lchild,rchild");
printf("\n");
for(i=0;i<m;i++,p++)printf("\n%6d,%6d,%6d,%6d,%6d\n",(*p).node,(*p).weight,(*p).parent,(*p).lchild,(*p).rchild);
printf("\n");
k=0;
p=HT;k=1;
for(i=4;i<m;++i){
if(i==4){S1=0;S2=1;(*(p+S1)).parent=i;(*(p+S2)).parent=i;(*(p+i)).lchild=S1;(*(p+i)).rchild=S2;(*(p+i)).weight=(*(p+S1)).weight+(*(p+S2)).weight;}
else{S1=k+1;S2=i-1;(*(p+S1)).parent=i;(*(p+S2)).parent=i;(*(p+i)).lchild=S1;(*(p+i)).rchild=S2;(*(p+i)).weight=(*(p+S1)).weight+(*(p+S2)).weight;++k;}
}
p=HT;
printf("\n");
printf("this is the tree data.");
printf("\n");
printf(" node,weight,parent,lchild,rchild");
printf("\n");
for(i=0;i<m;i++,p++)printf("\n%6d,%6d,%6d,%6d,%6d\n",(*p).node,(*p).weight,(*p).parent,(*p).lchild,(*p).rchild);
printf("\n");
printf("\n");
printf("this is the code data.");
printf("\n");
cd=(char *)malloc(n*sizeof(char));
*(cd+n-1)="\0";
for(i=0;i<n;++i)
{start=n-1;
for(c=i,f=(*(HT+i)).parent;f!=0;c=f,f=(*(HT+f)).parent)
{if((*(HT+f)).lchild==c) *(cd+(--start))='0';
else *(cd+(--start))='1';
printf("%c",*(cd+start));
}
printf(",,");
}
free(cd);
printf("\n");
}
void zifu(char *pp)
{int a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,x,y,z,brank,dhao,jhao;
int ii;
a=b=c=d=e=f=g=h=i=j=k=l=m=n=o=p=q=r=s=t=u=v=w=x=y=z=brank=dhao=jhao=0;
for(ii=0;*(pp+ii)!='\0';ii++)
{switch(*(pp+ii))
{case 'a':a++;break;
case 'b':b++;break;
case 'c':c++;break;
case 'd':d++;break;
case 'e':e++;break;
case 'f':f++;break;
case 'g':g++;break;
case 'h':h++;break;
case 'i':i++;break;
case 'j':j++;break;
case 'k':k++;break;
case 'l':l++;break;
case 'm':m++;break;
case 'n':n++;break;
case 'o':o++;break;
case 'p':p++;break;
case 'q':q++;break;
case 'r':r++;break;
case 's':s++;break;
case 't':t++;break;
case 'u':u++;break;
case 'v':v++;break;
case 'w':w++;break;
case 'x':x++;break;
case 'y':y++;break;
case 'z':z++;break;
case ' ':brank++;break;
case ',':dhao++;break;
case '.':jhao++;break;
}
}
printf("\n");
printf("a=%d,b=%d,c=%d,d=%d,e=%d,f=%d,g=%d,h=%d,i=%d,j=%d,k=%d,l=%d,m=%d,n=%d,o=%d,p=%d,q=%d,r=%d,s=%d,t=%d,u=%d,v=%d,w=%d,x=%d,y=%d,z=%d,brank=%d,jhao=%d,dhao=%d\n",a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,x,y,z,brank,jhao,dhao);
printf("\n");
}
main()
{int n;int *w;HuffmanTree *T;int a[4];
char *qq;int i;int min1,min2,min3,min4;
char cc[]={"aaaaaaabbbbbccccdd"};qq=cc;n=4;w=a;
zifu(qq);
printf("\n");
printf("look up!please input the data from min to max\n");
printf("min1=");
scanf("%d",&min1);
*w=min1;
printf("min2=");
scanf("%d",&min2);
*(w+1)=min2;
printf("min3=");
scanf("%d",&min3);
*(w+2)=min3;
printf("min4=");
scanf("%d",&min4);
*(w+3)=min4;
printf("this is the node data.");
for(i=0;i<4;i++)printf("%d,,",a[i]);
HuffmanCoding(T,w,n);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -