数据结构第08章.ppt

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
/*由叶结点向上直到根结点*/ while(parent != -1) { if(haffTree[parent].leftChild == child) cd-bit[cd-start] = 0; /*左孩子结点编码0*/ else cd-bit[cd-start] = 1; /*右孩子结点编码1*/ cd-start--; child = parent; parent = haffTree[child].parent; } /*保存每个叶结点的编码和不等长编码的起始位*/ for(j = cd-start+1; j n; j++) haffCode[i].bit[j] = cd-bit[j]; haffCode[i].start = cd-start; haffCode[i].weight = cd-weight; /*保存编码对应的权值*/ } } 例:设有字符集{A, B, C, D},各字符在电文中出现的次数集为{1, 3, 5, 7},则哈夫曼树构造过程如下图所示: 下标 weight leftChild rightChild parent flag 0 1 -1 -1 -1 0 1 3 -1 -1 -1 0 2 5 -1 -1 -1 0 3 7 -1 -1 -1 0 4 0 -1 -1 -1 0 5 0 -1 -1 -1 0 6 0 -1 -1 -1 0 (a) 下标 weight leftChild rightChild parent flag 0 1 -1 -1 4 1 1 3 -1 -1 4 1 2 5 -1 -1 -1 0 3 7 -1 -1 -1 0 4 4 0 1 -1 0 5 0 -1 -1 -1 0 6 0 -1 -1 -1 0 (b)第一步的结果 下标 weight leftChild rightChild parent flag 0 1 -1 -1 4 1 1 3 -1 -1 4 1 2 5 -1 -1 5 1 3 7 -1 -1 -1 0 4 4 0 1 5 1 5 9 4 2 -1 0 6 0 -1 -1 -1 0 (c)第二步的结果 下标 weight leftChild rightChild parent flag 0 1 -1 -1 4 1 1 3 -1 -1 4 1 2 5 -1 -1 5 1 3 7 -1 -1 6 1 4 4 0 1 5 1 5 9 4 2 6 1 6 16 3 5 -1 0 (d)哈夫曼树构造结果 0 1 2 3 bit start weight (e)哈夫曼编码结果 ? 1 0 0 1 1 ? 1 0 1 1 3 ? ? 1 1 2 5 ? ? ? 0 3 7 例8-4 设有字符集{A, B, C, D},各字符在电文中出现的次 数集为{1, 3, 5, 7},设计各字符的哈夫曼编码。 /*测试主函数*/ #include stdio.h #include stdlib.h #define MaxValue 10000 /*初始设定的权值最大值*/ #define MaxBit 4 /*初始设定的最大编码位数*/ #include Haffman.h void main(void) { int i, j, n = 4; int weight[] = {1,3,5,7}; HaffNode *myHaffTree = (HaffNode *) malloc(sizeof(HaffNode)*(2*n-1)); Code *myHaffCode = (Code *)malloc(sizeof(Code)*n); if(n MaxN) { printf(给出的n越界,修改MaxN!\n); exit(1); } Haffman(weight, n, myHaffTree); HaffmanCode(myHaffTree, n, myHaffCode); /*输出每个叶结点的哈夫曼编码*/ for(i = 0; i n; i++) { printf(Weight = %d Code = ,

文档评论(0)

dajuhyy + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档