回 帖 发 新 帖 刷新版面

主题:帮帮我吧 各位大姐大哥

[em10] 各位好 这是我照书编的赫夫曼树的构造和求出它的编码 但是有问题 请帮忙看贴的各位哥哥姐姐弟弟妹妹看一下我错在哪里啊? 请指出来 帮我改正一下好吗? 我是学C语言的 用的是 turboc2 来做的 请我改正一下  谢谢各位拉    [em18]
 
  #include<stdio.h>
   #include<stdlib.h>
    typedef struct
     { unsigned int weight;
       unsigned int parent,lchild,rchild;  }
     HTNode,*HuffmanTree;
    typedef char * *HuffmanCode;

    void Huffmancoding(HuffmanTree &HT,HuffmanCode &HC,int *w,int n)
     { if(n<=1)
    return;
       m=2*n-1;
       HT=(HuffmanTree)malloc((m+1)*sizeof(HTNode));
       for(p=HT+1,i=1;i<=n;++i,++p,++w)
    *p={*W,0,0,0};
       for(;i<=m;++i,++p)
    *p={0,0,0,0};
       for(i=n+1;i<=m;++i)
    { Select(HT,i-1,s1,s2);
      HT[s1].parent=i;
      HT[s2].parent=i;
      HT[i].lchild=s1;
      HT[i].rchild=s2;
      HT[i].weight=HT[s1].weight+HT[s2].weight;  }
       HC=(HuffmanCode)malloc((n+1)*sizeof(char *));
       cd=(char *)malloc(n*sizeof(char));
       cd[n-1]="\0";
       for(i=1;i<=n;++i)
    { start=n-1;
      for(c=i,f=HT[i].parent;f!=0;c=f,f=HT[f].parent)
       if(HT[f].lchild==c)
        cd[--start]="0";
       else
        cd[--start]="1";
      HC[i]=(char *)malloc((n-start)*sizeof(char));
      strcpy(HC[i],&cd[start]);  }
       free(cd);   }

    int main()
     { HTNode *HT,*HC;

       HuffmanCoding();}

回复列表 (共5个回复)

沙发

扫了两眼。
1。Select函数呢?
2。cd[n-1]="\0";  ==>  cd[n-1]='\0';
3。cd[--start]="0";  ==> cd[--start]='0';
4。cd[--start]="1"; ==> cd[--start]='1';

板凳

"Select函数呢?"请问是什么意思 应该怎么写 还有请问一下 我的主函数写的对不?  谢谢

3 楼

我是说你的Select函数还没有写啊?至于怎么写你还是自己看书吧。如果还不明白再问吧。
至于main函数显然有问题,你调用HuffmanCoding这个函数却没有传递任何参数,怎么可以呢?首先你的初始叶子结点的权值你得给出吧,叶子结点个数也得有吧。

4 楼

请问一下  Select函数 是用来做什么用的啊? 谢谢 书里没有写啊

5 楼

你拿的什么书啊,居然没有说明一下Select函数干什么用的。

Select函数就是在所有的二叉树根结点中,选择两个权值最小的结点,作为新的二叉树的根结点的左右子女,而新根结点的权值就是二者权值之和。

我来回复

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