麻烦你帮我看一下这个拿C编的哈夫曼数编码的程序,在VC++上有错误,麻烦了<br />#include"stdio.h"<br />#include"stdlib.h"<br />#include"string.h"<br />typedef struct<br />{<br /> char data;<br /> int weight;<br /> int parent,lchild,rchild;<br />}HTNode,* HTree;<br />typedef char** HTCode;<br />Select(HTree HT,int k,int* s1,int* s2)<br />{<br /> int m1=32767,m2=32767;<br /> int i;<br /> *s1=*s2=0;<br /> for(i=1;i<=k;i++)<br /> {<br /> if((HT[i].weight<=m1)&&(HT[i].parent==0))<br /> {<br /> m2=m1;<br /> *s2=*s1;<br /> m1=HT[i].weight;<br /> *s1=i;<br /> }<br /> else<br /> if((HT[i].weight)<=(m2&&HT[i].parent==0))<br /> {<br /> m2=HT[i].weight;<br /> *s2=i;<br /> }<br /> }<br />}<br />HTree InitHT(HTree *HT,int i)<br />{<br /> int n,m,j,s1,s2;<br /> char c;<br /> if(i<=1)<br /> return 0;<br /> n=2*i-1;<br /> *HT=(HTree)malloc((n+1)*sizeof(HTNode));<br /> if(!*HT)<br /> {<br /> printf("wrong");<br /> exit(0);<br /> }<br /> for(j=1;j<=i;j++)<br /> {<br /> printf("请输入字符:\n");<br /> getchar();<br /> c=getchar();<br /> (*HT)[j].data=c;<br /> printf("请输入该字符的权值:\n");<br /> scanf("%d",&m);<br /> (*HT)[j].weight=m;<br /> (*HT)[j].parent=0;<br /> (*HT)[j].lchild=0;<br /> (*HT)[j].rchild=0;<br /> }<br /> for(j=i+1;j<=n;j++)<br /> {<br /> (*HT)[j].data=0;<br /> (*HT)[j].weight=0;<br /> (*HT)[j].parent=0;<br /> (*HT)[j].lchild=0;<br /> (*HT)[j].rchild=0;<br /> }<br /> for(j=i+1;j<=n;j++)<br /> {<br /> Select(*HT,j-1,&s1,&s2);<br /> (*HT)[s1].parent=j;(*HT)[s2].parent=j;<br /> (*HT)[s1].lchild=s1;(*HT)[s2].rchild=s2;<br /> (*HT)[j].weight=(*HT)[s1].weight+(*HT[s2]).weight;<br /> }<br /> return *HT;<br />}<br />CodeHT(HTree HT,HTCode* HC,int n)<br />{<br /> char* cd;<br /> int i,start,c,f;<br /> *HC=(HTCode)malloc((n+1)*sizeof(char*));<br /> cd=(char* )malloc(n*sizeof(char));<br /> cd[n-1]='\0';<br /> for(i=1;i<=n;i++)<br /> {<br /> start=n-1;<br /> for(c=i,f=HT[i].parent;f!=0;c=f,f=HT[f].parent)<br /> {<br /> if(HT[f].lchild==c)<br /> cd[--start]='0';<br /> else<br /> cd[--start]='1';<br /> (*HC)[i]=(char*)malloc((n-start)*sizeof(char));<br /> strcpy((*HC)[i],&cd[start]);<br /> }<br /> free(cd);<br /> }<br />}<br />main()<br />{<br /> HTree HT=NULL;<br /> int i,j;<br /> HTCode HC;<br /> printf("输入编码的个数:\n");<br /> scanf("%d",&i);<br /> HT=InitHT(&HT,i);<br /> CodeHT(HT,&HC,i);<br /> for(j=1;j<=i;j++)<br /> {<br /> printf("\n%c的编码是%s\n",HT[j],HC[j]);<br /> }<br />}<br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br />