shotar0 2022-11-14 17:32 采纳率: 57.1%
浏览 24

哈夫曼编码(C语言)

问题遇到的现象和发生背景

哈夫曼编码的代码实现,树的创建检查过没有问题,编码的代码查不出出错在哪问题,输出Code的时候却出错了

用代码块功能插入代码,请勿粘贴截图
void HuffManCode(PHtTree HuffTree,int n,Code HuffCode[])
{
    Code *cd=(Code *)malloc(sizeof(Code));
    int i,j,child,parent;
    for(i=0;i<n;i++)
    {
        cd->start=n-1;
        cd->weight=HuffTree.ht[i].ww;
        child=i;
        parent=HuffTree.ht[child].parent;
    
        while(parent!=-1)
        {
            if(HuffTree.ht[parent].lchild==child)
                cd->bit[cd->start]=0;
            else
                cd->bit[cd->start]=1;
            cd->start--;
            child=parent;
            parent=HuffTree.ht[child].parent;
        }
        for(j=cd->start+1;j<n;j++)
            HuffCode[i].bit[j]=cd->bit[j];
        HuffCode[i].start=cd->start+1;
        HuffCode[i].weight=cd->weight;
    }
}

void main()
{
    int i,j,n=4;
    int weight[10]={1,3,5,7};
    PHtTree *myHaffTree = (PHtTree *)malloc(sizeof(PHtTree));
    Code *myHaffCode= (Code*)malloc(sizeof(Code)*n);
    if(2*n-1>MAXNODE)
    {
        printf("给出的n越界,修改MAXN的值!\n");
        exit(0);
    }
    myHaffTree=huffman(n,weight);
    HuffManCode(*myHaffTree,n,myHaffCode);
    for(i=0;i<n;i++)
    {
        printf("Weight =%d Code=",myHaffCode[i].weight);
        for(j=myHaffCode[i].start;j<n;j++)
            printf("%d",myHaffCode[i].bit[j]);
            printf("\n");
    }
}

运行结果及报错内容

img

我想要达到的结果

输出正确的哈夫曼编码

  • 写回答

1条回答 默认 最新

  • CSDN-Ada助手 CSDN-AI 官方账号 2022-11-14 20:11
    关注
    评论

报告相同问题?

问题事件

  • 修改了问题 11月14日
  • 创建了问题 11月14日

悬赏问题

  • ¥40 微信小程序 使用vant组件ActionSheet 下拉面板,内容区域滚动会触发。scroll-view自定义下拉刷!即使设置停止下拉刷新也不行。
  • ¥15 专业问题提问,7月5号2点之前
  • ¥25 使用cube ai 导入onnx模型时报错
  • ¥15 关于#微信小程序#的问题:用一个网页显示所有关联的微信小程序数据,包括每个小程序的用户访问量
  • ¥15 root的安卓12系统上,如何使apk获得root或者高级别的系统权限?
  • ¥20 关于#matlab#的问题:如果用MATLAB函数delayseq可以对分数延时,但是延时后波形较原波形有幅度上的改变
  • ¥15 使用华为ENSP软件模拟实现该实验拓扑
  • ¥15 通过程序读取主板上报税口的数据
  • ¥15 matlab修改为并行
  • ¥15 尝试访问%1服务的windows注册表时遇到问题。必须先解决此问题,然后才能运行安装过程。(请确认您正在使用管理员权限运行)373