| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 391 人关注过本帖
标题:Huffman树的编码译码问题,不了解错误的原因,求大神帮忙啊
取消只看楼主 加入收藏
肥仔欢乐多
Rank: 1
等 级:新手上路
帖 子:12
专家分:0
注 册:2013-5-25
结帖率:100%
收藏
 问题点数:0 回复次数:0 
Huffman树的编码译码问题,不了解错误的原因,求大神帮忙啊
#include <stdio.h>
#include <string.h>
#include <stdlib.h>


typedef struct{
     int weight;
     int parent,lchild,rchild;
     char data;
     char c[100];
}HTNode,*HuffmanTree;

void Sum(char *s,int *sum)             //sum[i](i<=1&&i<=26) 为第i个字母出现的次数
{//统计各个字符出现的次数   
    int i=0;               
    while (s[i]!=NULL){
        sum[s[i]-96]++;
        i++;
    }
}

int PrintSum(int *sum)
{//输出出现的字符以及次数
   int i,k=0;
   char C;
   for (i=1;i<=26;i++)
       if(sum[i]!=0){
          C=char(i+96);
          printf("字符: %c  出现次数: %d\n",C,sum[i]);
          k++;
       }

       printf("共出现了%d个字符\n",k);
       return k;
}

int Select(HuffmanTree HT,int i,int r)
{
    int a=10000;
    int b=10000;
    int min1,min2;
    int j=0;
    for(j=1;j<=i;j++)
        if (HT[j].parent==0)
           if(HT[j].weight<a) {min2=min1; min1=j;b=a;a=HT[j].weight;}
           else if(HT[j].weight<b) {min2=j;b=HT[j].weight;}
           if(r==0) return min1;
           else return min2;

}

void CreatHuffman(HuffmanTree &HT,int k,int *sum)
{
    HuffmanTree p;
    int s,i=1,j=0;
    int min1;
    int min2;
    s=2*k-1;                           //数组所需的容量
    HT=(HuffmanTree)malloc((s+1)*sizeof(HTNode));
    p=HT;
    p++;
    while(i<=k){
        while(*sum==0) { j++; sum++; }
        p->weight=*sum;
        p->data=char(j+96);
        p->parent=0;
        p->lchild=0;
        p->rchild=0;
        p++;j++;sum++;i++;
    }
    for(i=k+1;i<=s;i++)
    {
        min1=Select(HT,i-1,0);
        min2=Select(HT,i-1,1);
        HT[min1].parent=i;
        HT[min2].parent=i;
        HT[i].lchild=min1;
        HT[i].rchild=min2;
        HT[i].weight=HT[min1].weight+HT[min2].weight;
        HT[i].parent=0;
    }
    printf("建立的哈夫曼树为:\n\n");
    printf("number data  weight  lchild  rchild  parent\n");
    for(i=1;i<=s;i++){
        if(HT[i].data>'z'||HT[i].data<'a')  HT[i].data=' ';
        printf("%d:     %c     %d       %d       %d       %d      \n",i,HT[i].data,HT[i].weight,HT[i].lchild,HT[i].rchild,HT[i].parent);
    }
}

void BianMa(HuffmanTree &HT,int i,char j)
{   
    if(HT[i].parent!=0){

        strcat(HT[i].c,HT(HT[i].parent).c);
        if(j=='0')
            strcat(HT[i].c,"0");
        else strcat(HT[i].c,"1");

        if(HT[i].lchild!=0)
           BianMa(HT,HT[i].lchild,'0');
        if(HT[i].rchild!=0)
           BianMa(HT,HT[i].rchild,'0');
    }
}

int main()
{   
    int k;
     HuffmanTree HT;
    char s[100]={0};
    int sum[27]={0};
    gets(s);
    Sum(s,sum);
    k=PrintSum(sum);
    CreatHuffman(HT,k,sum);
    BianMa(HT,2k-1,'0');
    return 0;
}





这是源码  我用vc6.0编译有6个错误,程序只写了创建huffman树和求各个字符的编码,创建huffman树没有问题,但是BianMa函数有问题。


shu.cpp
C:\Documents and Settings\Administrator\桌面\新建文件夹\shu.cpp(94) : error C2064: term does not evaluate to a function
C:\Documents and Settings\Administrator\桌面\新建文件夹\shu.cpp(94) : error C2228: left of '.c' must have class/struct/union type
C:\Documents and Settings\Administrator\桌面\新建文件夹\shu.cpp(116) : error C2059: syntax error : 'bad suffix on number'
C:\Documents and Settings\Administrator\桌面\新建文件夹\shu.cpp(116) : error C2146: syntax error : missing ')' before identifier 'k'
C:\Documents and Settings\Administrator\桌面\新建文件夹\shu.cpp(116) : error C2660: 'BianMa' : function does not take 2 parameters
C:\Documents and Settings\Administrator\桌面\新建文件夹\shu.cpp(116) : error C2059: syntax error : ')'
Error executing cl.exe.

shu.obj - 6 error(s), 0 warning(s)


这是编译错误提示,本人实在看不懂。。。。。

我的算法思想是  从建的树的头结点开始 利用类似树的中缀遍历方法求每个节点的编码,其中用了strcat函数,将节点的父节点的编码后面连接上“0”或“1”(左子树为0,右子树为1),我在结构体里定义了 char c[100] 存字符的编码,但是调用的时候这里应该有问题(不会改);ps:HT[i].c 这样的写法对吗

求大神帮忙解决下错误原因(不要修改算法思想)。


多谢多谢   搞了我好几个小时了啊  程序员苦逼呀。。。
搜索更多相关主题的帖子: include parent 统计 字母 
2013-11-29 21:25
快速回复:Huffman树的编码译码问题,不了解错误的原因,求大神帮忙啊
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.017308 second(s), 10 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved