关于构造哈夫曼树的问题,附代码如下:
我写的代码如下,系统检查没有发现什么问题,但运行时出错,哪里有问题?#include<stdio.h>
typedef struct
{
int wg;
int pr;
int lc;
int rc;
}huff;
int a[9]; /*存放权值,{5,29,7,8,14,23,3,11}*/
huff ht[16];
void paixu(int a[],int n) /*冒泡排序,将权值由小到大排序*/
{
int j,k,t,F=n-1;
while(F>0)
{
k=F;
F=0;
for(j=1;j<k;j++)
{
if(a[j]>a[j+1])
{
t=a[j];
a[j]=a[j+1];
a[j+1]=t;
F=j;
}
}
}
}
void Create(int a[],int m,huff ht[],int n)
{
int i,j,x,y,k;
for(i=1;i<=n/2;i++)
{
printf("请输入a[%d]的权值: ",i);
scanf("%d",&a[i]);
ht[i].wg=a[i];
ht[i].rc=0;
ht[i].lc=0;
}
for(i=1;i<=n-1;i++)
ht[i].pr=0;
paixu(a,m);
i=1;
for(k=m;k<=n-1;k++)
{
ht[k].wg=a[i]+a[i+1];
for(j=1;j<k;j++)
{
if(ht[j].wg==a[i])
{
x=j;
break;
}
}
for(j=1;j<k;j++)
{
if(ht[k].wg==a[i+1])
{
y=j;
break;
}
}
ht[k].rc=x;
ht[k].lc=y;
ht[x].pr=k;
ht[y].pr=k;
i=i+1;
a[i]=ht[k].wg;
paixu(a,m);
}
}
void print(huff ht[],int n)
{
int i;
for(i=1;i<=n-1;i++)
printf("ht[%d]: wg:%d, pr:%d, lc:%d, rc:%d\n",i,ht[i].wg,ht[i].pr,ht[i].lc,ht[i].rc);
}
void main()
{
Create(a,9,ht,16);
print(ht,16);
}
[ 本帖最后由 霖海听涛 于 2011-5-15 22:14 编辑 ]