ImageVerifierCode 换一换
格式:DOCX , 页数:12 ,大小:144.72KB ,
资源ID:5508602      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/5508602.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(哈夫曼树 课程设计报告.docx)为本站会员(b****4)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

哈夫曼树 课程设计报告.docx

1、哈夫曼树 课程设计报告 数据结构课程设计报告 题目:哈夫曼树及其应用 * * 学 号: * 班 级: 10211116 * * 2012年 6 月 3 日1、需求分析说明 32、总体设计43、详细设计54、实现部分75、程序测试96、总结10一需求分析说明设计目的: 熟悉树的各种存储结构及其特点。 掌握建立哈夫曼树和哈夫曼编码的方法及带权路径长度的计算。 设计内容数据的读入存储,生成文件,将键盘输入的信息存入指定的文件中;设计一程序求解此问题哈夫曼(Huffman)编码原理是一种利用二叉树实现的编码原理哈夫曼(Huffman)编码是1952年为文本文件而建立,是一种统计编码。属于无损压缩编码。

2、哈夫曼编码的码长是变化的,对于出现频率高的信息,编码的长度较短;而对于出现频率低的信息,编码长度较长。这样,处理全部信息的总码长一定小于实际信息的符号长度。锻炼我们的编码能力,真正理解数据结构的编码思想,并且锻炼我们的动手能力和成员间的配合,提高程序编写能力。在信息传递时,希望长度能尽可能短,即采用最短码。哈夫曼编码的应用,就是采用这种有效的数据压缩技术可以节省数据文件的存储空间和计算机网络的传送时间。二总体设计(1).初始化:提示初始化界面提示各字符及其权值将存放在hfmTree中以字母出现次数为权值建立哈弗曼树弹出选择菜单进行进一步操作;(2).编码:弹出编码界面读取文件提示输入要编码的字

3、符串对文本进行哈弗曼编码并输出编码保存编码文件;(3).译码:弹出译码界面利用建立好的哈弗曼树进行译码将译码输出保存译码文件;三详细设计1.数据结构设计#include /包含的库函数#include#includeconst int n=6; /叶子数目const int m=2*n-1; /森林中树的棵树const int c=4;class treepublic:char data; int weight; /权值int parent; /双亲int lch,rch; /左右孩子void creathafumantree(); /建立哈夫曼树void editcode();/编码函数vo

4、id trancode(char b,int max);/译码函数;2算法设计哈夫曼树编码算法:输入字符,权值算法:输入一些字符,然后再输入相对应数量的权值,建哈夫曼树,然后进行编码,并得到相对应的哈夫曼编码。void tree:editcode() /编码 int i,j,k,f,count=0; int coden+1c+1; for(i=1;i=n;i+)for(j=1;j=c;j+)codeij=2; for(i=1;i=n;i+) k=1; j=hftreei.parent; f=i; while(j!=0) if(hftreej.lch=f)codeik+=0;elsecodeik

5、+=1;j=hftreej.parent; f=hftreef.parent; coutendl; for(i=1;i=n;i+)cout权值为hftreei.weight的编码为:=1;j-) if(codeij!=2)coutcodeij ;count+=1;coutendl; count=count/n;cout平均编码的长度为:countendl;哈夫曼树译码算法:译码:弹出译码界面利用建立好的哈弗曼树进行译码将译码输出保存译码文件void tree:trancode(char b,int max) /译码int i=0;int j=m;cout该段代码编译为:endl;while(b

6、i!=0)if(bi=0)j=hftreej.lch;elsej=hftreej.rch;if(hftreej.lch=0 & hftreej.rch=0)couthftreej.weight;j=m;i+;四实现部分class treepublic:char data; int weight; /权值int parent; /双亲int lch,rch; /左右孩子void creathafumantree(); /建立哈夫曼树void editcode();/编码函数void trancode(char b,int max);/译码函数;void tree:editcode() /编码 i

7、nt i,j,k,f,count=0; int coden+1c+1; for(i=1;i=n;i+)for(j=1;j=c;j+)codeij=2; for(i=1;i=n;i+) k=1; j=hftreei.parent; f=i; while(j!=0) if(hftreej.lch=f)codeik+=0;elsecodeik+=1;j=hftreej.parent; f=hftreef.parent; coutendl; for(i=1;i=n;i+)cout权值为hftreei.weight的编码为:=1;j-) if(codeij!=2)coutcodeij ;count+=1

8、;coutendl; count=count/n;cout平均编码的长度为:countendl;void tree:trancode(char b,int max) /译码int i=0;int j=m;cout该段代码编译为:endl;while(bi!=0)if(bi=0)j=hftreej.lch;elsej=hftreej.rch;if(hftreej.lch=0 & hftreej.rch=0)couthftreej.weight;j=m;i+;五程序测试1.menu菜单图2. 输入各值并生成编码图3.输入编码生成译码图六总结1.设计体会当刚拿到程序课题时,一看,感觉都挺容易的,都是

9、我们学过的一些内容,应该很容易完成,于是就从中选了一个哈夫曼树的应用。结果一作才知道,并不如我们想的那么容易。对于建立哈夫曼树,创建哈夫曼编码等算法,总是因一点不对而编译不成功。2.心得体会 通过数据结构课程设计,我的c+语言水平有了比较大的提高,其中c+语言关于类的操作理解的比以前深刻不少。另外是数据结构方面的提高,对哈夫曼树的构造,及哈夫曼码方面也有不少的提高。在项目中也出现了很多的问题,最大的问题就是对程序设计框架结构的不了解,在实现代码与功能的连接时经常会出现各种不同的错误,在实现一些功能时系统常常会报错。许多错误不知从哪修改,以致托了整个设计的后腿。课程设计中,既回顾了很多以前的东西,也发现了很多的问题,以前都没遇见过的,收获很大。通过本次数据结构的课程设计,我学习了很多在上课没懂的知识,并对求哈夫曼树及哈夫曼编码/译码的算法有了更加深刻的了解,更巩固了课堂中学习有关于哈夫曼编码的知识, 此次哈夫曼树的应用系统的设计让自己对数据结构的了解更深入。

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1