主题:这个Huffman问题出现在哪儿?
/*有关哈夫曼树的操作*/
#include<stdio.h>
#include<stdlib.h>
#define N 4
#define M 2*N -1
typedef struct /*定义哈夫曼树*/
{
int weight;
int parent;
int Lchild;
int Rchild;
}HTNode,HuffmanTree[M+1];
void CrtHuffmanTree(HuffmanTree ht,int w[],int N) /*构建哈夫曼树*/
{
int i;
for(i=1;i<=N;i++)
ht[i]={w[i],0,0,0};
m=2*N-1;
for(i=N+1;i<=m;i++)
ht[i]={0,0,0,0};
for(i=n+1;i<=m;i++)
{
select(ht,i-1,&s1,&s2);
ht[i].weight=ht[s1].weight+ht[s2].weight;
ht[s1].parent=i;
ht[s2].parent=i;
ht[i].Lchild=s1;
ht[i].Rchild=s2;
}
}
void y(int k1,int s1,int *b,int *t) /*将最小的两个数相加,并存放在ht数组中*/
{
int i,f;
f=b[s1]+b[k1];
for(i=k1;i<=t;i++)
b[i]=b[i+1];
for(i=s1;i<=t;i++)
b[i]=b[i+1];
b[*t-2]=f;
*t--;
for(i=0;i<t-1;i++)
printf("%5d",b[i]);
}
int select(HuffmanTree ht,int p,int &s1,int &s2); /*找ht中元素最小的两个数*/
{
int i,k=0,s=0,min1,min2;
min1=ht[0];
for(i=0;i<p;i++)
if(min1>ht[i])
{
min1=ht[i];
k=i;
}
*s1=min1; /*k为数组最小的数*/
for(i=0;i<p;i++)
if(i==k)continue;
else if(min2>ht[i])
{
min2=ht[i];
s=i;
}
*s2=min2; /*s为数组次小的数*/
for(i=0;i<p;i++)
printf("%5d",ht[i]);
printf(" s1=%d s2=%d",*s1,*s2);
printf("\n\n");
y(k,s,ht,&p);
getch();
}
void main()
{
HuffmanTree[M+1] HT;
int i,q[N];
for(i=0;i<N;i++)
q[i]=random(50);
CrtHuffmanTree(HT,q,N);
}
编译时提示:void CrtHuffmanTree(HuffmanTree ht,int w[],int N) 说明语法错误,是什么原因 ?
#include<stdio.h>
#include<stdlib.h>
#define N 4
#define M 2*N -1
typedef struct /*定义哈夫曼树*/
{
int weight;
int parent;
int Lchild;
int Rchild;
}HTNode,HuffmanTree[M+1];
void CrtHuffmanTree(HuffmanTree ht,int w[],int N) /*构建哈夫曼树*/
{
int i;
for(i=1;i<=N;i++)
ht[i]={w[i],0,0,0};
m=2*N-1;
for(i=N+1;i<=m;i++)
ht[i]={0,0,0,0};
for(i=n+1;i<=m;i++)
{
select(ht,i-1,&s1,&s2);
ht[i].weight=ht[s1].weight+ht[s2].weight;
ht[s1].parent=i;
ht[s2].parent=i;
ht[i].Lchild=s1;
ht[i].Rchild=s2;
}
}
void y(int k1,int s1,int *b,int *t) /*将最小的两个数相加,并存放在ht数组中*/
{
int i,f;
f=b[s1]+b[k1];
for(i=k1;i<=t;i++)
b[i]=b[i+1];
for(i=s1;i<=t;i++)
b[i]=b[i+1];
b[*t-2]=f;
*t--;
for(i=0;i<t-1;i++)
printf("%5d",b[i]);
}
int select(HuffmanTree ht,int p,int &s1,int &s2); /*找ht中元素最小的两个数*/
{
int i,k=0,s=0,min1,min2;
min1=ht[0];
for(i=0;i<p;i++)
if(min1>ht[i])
{
min1=ht[i];
k=i;
}
*s1=min1; /*k为数组最小的数*/
for(i=0;i<p;i++)
if(i==k)continue;
else if(min2>ht[i])
{
min2=ht[i];
s=i;
}
*s2=min2; /*s为数组次小的数*/
for(i=0;i<p;i++)
printf("%5d",ht[i]);
printf(" s1=%d s2=%d",*s1,*s2);
printf("\n\n");
y(k,s,ht,&p);
getch();
}
void main()
{
HuffmanTree[M+1] HT;
int i,q[N];
for(i=0;i<N;i++)
q[i]=random(50);
CrtHuffmanTree(HT,q,N);
}
编译时提示:void CrtHuffmanTree(HuffmanTree ht,int w[],int N) 说明语法错误,是什么原因 ?