手机版
你好,游客 登录 注册
背景:
阅读新闻

Huffman编码与解码的实现

[日期:2014-08-17] 来源:Linux社区  作者:OshynSong [字体: ]

对于编码后得到的编码字符序列HC,结果过程只需找到对应的下标即可。如下:

int HuffmanDecode(HuffmanTree HT,char* code, int n)
{
int i = 0, r;
for(int j = 1; j <= 2*n-1; j++)
if(HT[j].parent == 0) {r = j;break;}

while(code[i] == '0' || code[i] == '1')
{
if(code[i] == '0')
r = HT[r].lchild;
else if(code[i] == '1')
r = HT[r].rchild;
i++;
}
return r;
}

最后,主函数中的调用如下,整个实现起来后比较方便。

int main()
{
printf("请输入待编码的字符个数:\n");
int n = 0;
scanf("%d", &n);
char codechar[n];
unsigned int weight[n];

printf("请输入编码字符:\n");
scanf("%s", codechar);
for(int i = 0; i < n; i++)
{
printf("\n请输入第%d个字符对应的权重:\n", i+1);
scanf("%d", &weight[i]);
}

HuffmanTree ht;
HuffmanCode hc = HuffmanEncode(ht, weight, n);
printf("\n构建的赫夫曼树如下(权重-左孩子-右孩子-父亲):\n");
for(int i = 1; i <= 2*n-1; i++)
{
printf("%d\t%d\t%d\t%d\n", ht[i].weight, ht[i].lchild, ht[i].rchild, ht[i].parent);
}
printf("\n每个字符对应的编码如下:\n");
for(int i = 0; i < n; i++)
{
printf("%c\t:\t%s\n", codechar[i], hc[i]);
}

printf("\n请输入待解码的编码字符串:");
char str[n];
scanf("%s", str);
int hcindex = HuffmanDecode(ht, str, n);
printf("%s编码的字符是:%c\n", str, codechar[hcindex-1]);
return 0;
}

结果如下:

Huffman编码与解码的实现

本文永久更新链接地址http://www.linuxidc.com/Linux/2014-08/105644.htm

linux
相关资讯       Huffman  Huffman编码  编码 
本文评论   查看全部评论 (0)
表情: 表情 姓名: 字数

       

评论声明
  • 尊重网上道德,遵守中华人民共和国的各项有关法律法规
  • 承担一切因您的行为而直接或间接导致的民事或刑事法律责任
  • 本站管理人员有权保留或删除其管辖留言中的任意内容
  • 本站有权在网站内转载或引用您的评论
  • 参与本评论即表明您已经阅读并接受上述条款