⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 haffum.txt

📁 该算法实现了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 + -