麻瓜小姐姐 2017-04-30 07:18 采纳率: 0%
浏览 1567

我的哈夫曼编码输出是这样的

#include
struct node
{
int weight;
int parent,lch,rch;
};

int n;

creat_huff(struct node Htree[]);
code_huff(struct node Htree[]);

creat_huff(struct node Htree[])
{
int i,j,min1,min2,min11,min22;
printf("请输入叶子的结点个数:");

scanf("%d",&n);
for(i=0;i<2*n-1;i++)
{
Htree[i].parent=-1; //数组Htree的初始化
Htree[i].lch=-1;
Htree[i].rch=-1;
}

for(i=0;i<n;i++)
{
    printf("输入第%d个叶节点的权值:",i);
    scanf("%d",&Htree[i].weight);                   //叶子的权值赋值到Htree数组中
}
for(i=n;i<2*n-1;i++)
{
    min1=min2=10000;
    min11=min22=0;                                    //用min1,min2记录最小的权值;min11.min22记录位置;
    for(j=0;j<i;j++)
    {
        if(Htree[j].parent==-1)
            if(Htree[j].weight<min1)                           //当权值比最小值还要小的时候,最小值赋给次小值,权值赋给最小值。
            {       min2=min1;
            min22=min11;
            min11=j;
            min1=Htree[j].weight;
            }
            else
                if(Htree[j].weight<min2)
                {
                    min22=j;
                    min22=Htree[j].weight;
                }
    }
    Htree[min11].parent=i;                                            //设置最小值和次小值的parent域
    Htree[min22].parent=i;                                        //设置新的parent,lch,rch
    Htree[i].weight=Htree[min11].weight+Htree[min22].weight;
    Htree[i].lch=min11;
    Htree[i].rch=min22;
}
Htree[2*n-2].parent=-1;

}

code_huff(struct node Htree[])
{
int i,j,k,pr,start;
char code[50][50];
for(i=0;i<n;i++)
{
j=n-2;
k=i;

    while (Htree[k].parent!=-1)
    {
        pr=Htree[k].parent;      //记录父结点
        if(k==Htree[pr].lch)
            code[i][j]='0';         //左孩子编码为0,右编码为1
        else
        code[i][j]='1';       //编码存进数组里
        j=j-1;
        k=pr;                   //从叶结点逐渐到根结点
        pr=Htree[k].parent;
        code[i][n-1]=j+1;
    }
    printf("编码为:\n");
    for(i=0;i<n;i++)
    {
        printf("第%d个哈夫曼编码是:",i);
        start=code[i][n-1];
        for(j=start;j<n-1;j++);
        printf("    %d",code[i][j]);
        printf("\n");
}
}

}

main()
{
    int i,j,k,pr,start;
    char code[50][50];
    struct node Htree[20];
    creat_huff(Htree);

    printf("\n weight  parent  lch  rch\n");
    for (i=0;i<2*n-1;i++)
    {printf("    %-6d%-8d%-5d%-5d\n",Htree[i].weight,Htree[i].parent,Htree[i].lch,Htree[i].rch);
    }
    code_huff(Htree);

}
  • 写回答

1条回答 默认 最新

  • 夕阳雨晴 2017-04-30 09:59
    关注

    可以考虑和这个哈夫曼编码的实现对照哈。 http://download.csdn.net/detail/sun1021873926/9730076

    评论

报告相同问题?

悬赏问题

  • ¥15 关于#java#的问题,请各位专家解答!
  • ¥15 急matlab编程仿真二阶震荡系统
  • ¥20 TEC-9的数据通路实验
  • ¥15 ue5 .3之前好好的现在只要是激活关卡就会崩溃
  • ¥50 MATLAB实现圆柱体容器内球形颗粒堆积
  • ¥15 python如何将动态的多个子列表,拼接后进行集合的交集
  • ¥20 vitis-ai量化基于pytorch框架下的yolov5模型
  • ¥15 如何实现H5在QQ平台上的二次分享卡片效果?
  • ¥30 求解达问题(有红包)
  • ¥15 请解包一个pak文件