大神帮忙看看,一个程序看不懂
一个霍夫曼编码程序,由于C语言基础不好,不知道运行后该怎么输入参数,求大神指教,谢谢啦
# include "stdio.h"
# include "stdlib.h"
# include "string.h"
# include "math.h"
# define DELTA 1.0e-6
void sort(double * ,char** ,int * ,int);
void code(double * ,char** ,int * ,int);
int
main(void)
{
float *p_i,*p;
float sum;
float temp;
char **c;
int *idx;
int q;
int i;
fscanf( stdin,"%d",&q);
idx=(int*)calloc(q,sizeof(int));
p_i=(float*)calloc(q,sizeof(float));
p=(float*)calloc(q,sizeof(float));
c=(char**)calloc(q,sizeof(char*));
for(i=0;i<q;i++)
{
c[i]=(char*)calloc(1,sizeof(char));
c[i][0]='\0';
}
sum=0.0;
for(i=0;i<q;i++)
{
fscanf(stdin,"&f",&p[i]);
p_i[i]= p[i];
idx[i]= i;
sum+=p_i[i];
}
if(fabs(sum-1.0)>DELTA)
{
fprintf(stderr,"p_i error\n");
exit(-1);
}
code(p_i,c,idx,q);
for(i=0;i<q;i++)
{
fprintf(stdout,"%d %.6f %s\n",idx[i],p[idx[i]],c[idx[i]]);
}
for(i=q;i>0;--i)
{
free(c[i]);
}
free(c);
free(p);
free(p_i);
free(idx);
exit(0);
}
void sort(double*p,char **c,int *idx,int q)
{
int finish=0;
int i,j;
int l1,l2;
char *s;
float t;
while(i<q &&! finish)
{
finish= 1;
for(j=0;j<q-i;j++ )
{
if(p[j]<p[j+1])
{
t=p[j];
p[j]=p[j+1];
p[j+1]=t;
l1=idx[j];
idx[j]=idx[j+1];
idx[j+1]=l1;
l1=strlen(c[j]);
l2=strlen(c[j+1]);
s=(char*)calloc(l1+1,sizeof(char));
strcpy(s,c[j]);
realloc(c[j],l2+1);
strcpy(c[j],c[j+1]);
realloc(c[j+1],l1+1);
strcpy(c[j+1],s);
free(s);
}
}
i++;
}
}
void code(double *p ,char **c ,int *idx ,int q)
{
int l1,l2;
char *s;
if(q==2)
{
realloc(c[0],3);
realloc(c[1],3);
strcat(c[0],"0");
strcat(c[1],"1");
}
else
{
p[q-2]=p[q-1]+p[q-2];
sort(p,c,idx,q-1);
code(p,c,idx,q-1);
l1=strlen(c[q-2]);
l2=strlen(c[q-1]);
s=(char*)calloc(l1+2,sizeof(char*));
strcpy(s,c[q-2]);
realloc(c[q-2],l1+2);
strcat(c[q-2],"0");
realloc(c[q-1],l2+2);
strcat(s,"1");
strcpy(c[q-1],s);
free(s) ;
}
}