回 帖 发 新 帖 刷新版面

主题:这个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) 说明语法错误,是什么原因 ?

回复列表 (共7个回复)

沙发


咋都没有人回呀?

板凳

那么多变量不定义就在用了,你是不是用惯了某些变量不用显示定义的语言啊,如matlab的编程脚本,还有你说出错的那里你定义的参数名跟你自己定义的宏名一样了。
先把这些改了吧,问题挺多

3 楼

本来还想帮你改改,但是太多语法错误了,指针,引用乱用,居然还有把结构体赋值给int型的。你先去复习一下语法吧

4 楼

To LZ:

Write code start with
[code=c]
int main() {
}
[/code]

Add one line at a time, compile it each time.

5 楼

能不能说清楚点呀?

6 楼

试试 ht[i] = (HTNode){ ... };

7 楼


能否具体指出来呀?
谢谢了

我来回复

您尚未登录,请登录后再回复。点此登录或注册