数据结构赫夫曼编码的应用.docx
- 文档编号:1448545
- 上传时间:2023-05-01
- 格式:DOCX
- 页数:12
- 大小:168.24KB
数据结构赫夫曼编码的应用.docx
《数据结构赫夫曼编码的应用.docx》由会员分享,可在线阅读,更多相关《数据结构赫夫曼编码的应用.docx(12页珍藏版)》请在冰点文库上搜索。
数据结构赫夫曼编码的应用
一、课题名称:
赫夫曼编码的应用
二、课题来源:
课程组自拟
三、课题类型:
综合型
四、目的意义:
1.学会编写实现树的各种操作的算法;
2.掌握树的定义、存储结构;
3.掌握哈夫曼树的建立和实现哈夫曼编码,解码及译码。
五、基本要求:
对输入的一串电文字符实现赫夫曼编码,再对赫夫曼编码生成的代码串进行译码,输出电文字符串。
(1)根据输入的一串电文字符,建立赫夫曼树,并输出显示赫夫曼树。
(2)对输入的一串电文字符实现赫夫曼编码,为每个字符生成它们的编码。
(3)实现赫夫曼编码的解码。
六、运行环境
使用《数据结构》(严蔚敏,吴伟民,1997,C语言版)中给出的算法,将二叉树存放在连续空间里(静态链表),空间的每个结点内仍有左子树、右子树、双亲等指针。
使用VC++软件实现。
七.课程设计步骤简介
1I:
初始化(Initialization)。
从终端读入字符集大小n,以及n个字符和n个权值,建立哈夫曼树。
2E:
编码(Encoding)。
利用已建好的哈夫曼树对输入的字符进行编码。
3D:
译码(Decoding)。
利用已建好的哈夫曼树对输入的字符进行译码。
编码算法:
(1)对输入的一段欲编码的字符串进行统计各个字符出现的次数,并它们转化为权值{w1,w2,……,wN}构成n棵二叉树的集合F={T1,T2,……,Tn}把它们保存到结构体数组HT『n』中,其中{Ti是按它们的ASCⅡ码值先后排序。
其中每棵二叉树Ti中只有一个带权为Wi的根结点的权值为其左、右子树上根结点的权值之和。
(2)在HT『1..i』中选取两棵根结点的权值最小且没有被选过的树作为左右子树构造一棵新的二叉树,且置新的二叉树的根结点的权值为左、右子树上根结点的权值之和。
(3)哈夫曼树已经建立后,从叶子到根逆向求每一个字符的哈夫曼编码。
.译码算法:
译码的过程是分解电文中字符串,从根出发,按字符'0',或'1'确定找左孩子或右孩子,直至叶子结点,便求的该子串相应字符并输出接着下一个字符。
八.流程图
1赫夫曼树的初始化:
否
是
2输入赫夫曼树的数据:
是
否
3找出最小的两个数:
否
是
是
否
4建赫夫曼树:
否
是
5赫夫曼编码表:
否
是
否
是
6编码:
否
是
7解码:
否
是
九.源程序
#include<>
#include<>
#include<>
#definen6eight=0;arent=-1;child=-1;child=-1;eight=k;arent==-1)arent==-1
if(T[i].weight start=n; c=i; while((p=T[c].parent)>=0)arent)>=0 { cd[--start]=(T[p].lchild==c)? '0': '1';its,&cd[start]);its) 0 } printf("电文的哈夫曼编码如下: "); for(i=0;i } } voidzip(huffmancode&H,char*ch,char*s)h&&ch[j])j++;its);child! =-1)child不等于-1 { if(s[i]=='0')child;i++;}child;i++;}h;h的字符赋给ch[j++] } ch[j]='\0'; printf("%s的解码为: ",s);//输出赋值后的字符 puts(ch); } /************************************/ voidmain() { charch[]="abcdef",s[36]="\0"; huffmantreeT; huffmancodeH;//赫夫曼编码表 printf("\n创建哈夫曼树\n"); creathftree(T); getchar(); printf("\n编码表\n"); creathfcode(T,H); printf("\n编码\n"); zip(H,ch,s); printf("\n解码\n"); charss[]="0110"; uzip(H,ss,T); } 十.运行结果
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 数据结构 赫夫曼 编码 应用