- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
数据结构课程设计报告哈夫曼编译器
数据结构课程设计
设计说明书
起止日期: 年 月 日 至 年 月 日学生姓名 班级 成绩 指导教师(签字)
年 月 日…,wn},设计一个不等长编码方案,使得该编码系统的空间效率最好。
3.所具有的功能:
(1) 为一字符文本编码功能:将一字符文本复制到指定的文本中,并保存到指定路径,让程序自动为它编码。
(2) 为部分字符编码功能:输入部分字符与对应的字符频率,让程序为之编码(需注意输入格式)。
(3) 保存输出到文本功能:将编码结果输出到文本。
(4) 输出保存文本信息功能:将功能3保存的文本信息输出到屏幕上,用于查看结果是否正确。
4.设计要求
(1)设计数据结构;
(2)设计编码算法;
(3)分析时间复杂度和空间复杂度。
(4)字符和频度如下:
字符 空格 A B C D E F G H I J K L M N O P Q R S T U V W X Y Z
频度 186 64 13 22 32 103 21 15 47 57 1 2 32 20 57 63 15 1 48 51 80 23 8 18 1 16
5.设计内容与步骤
(1)选择合适的数据结构
(2)结点结构的设计
(3)算法设计与分析
(4)程序设计、实现、调试
(5)课程设计说明书
6.设计工作计划与进度安排
(1)设计工作4学时
(2)实现与调试16学时
(3)课程设计说明书4学时
二、算法设计
Huffman编码是一种可变长编码方式,是由美国数学家David Huffman创立的,是二叉树的一种特殊转化形式。编码的原理是:将使用次数多的代码转换成长度较短的代码,而使用次数少的可以使用较长的编码,并且保持编码的唯一可解性。Huffman算法的最根本的原则是:累计的(字符的统计数字*字符的编码长度)为最小,也就是权值(字符的统计数字*字符的编码长度)的和最小。
三、程序的功能设计
为实现系统功能,本程序主要分为五个模块。它们分别为:
1.初始化功能模块
此功能模块的功能为从键盘接收字符集大小n,以及n各字符和n个权值。
2.建立哈弗曼树的功能模块
此模块功能为使用1中或从一文本中得到的数据按照教材的构造哈夫曼树的算法构造哈夫曼树。
3.建立哈夫曼编码与译码的功能模块
此模块功能为读入相关的字符信息进行哈夫曼编码,并将译码结果输出,在必要时也可保存到文件中。
其中各个函数的功能分别如下:
notesave函数用于保存输出的结果;
hfmtree函数用于建立结点哈夫曼树并输出最终结果;
readnote函数用于读取目标文本字符信息;
4.流程图:
四、函数编码及调试
由于本人能力有限难免不会在编码与调试过程中遇到这样或那样的问题,但通过长时间的改正,查询资料与询问,终于能将出现一些致命错误得以修正。例如:在输入编码结果信息时由于少了一个很不明显的Getchar()的接收Enter的函数,后面的就全乱了使程序出现了不能达到意料之中的效果。还有先是运行完一个函数后就跳出了整个运行程序不能再继续,后来通过查阅书籍,明白再主函数中加一个For语句就可以避免这一问题。第三个问题就是由于调用完一个函数后显示的信息还是留在运行界面,但它们的确有没什么用且占用界面,不美观,后来通过询问同学得知,在每个要调用的函数后加一个system(cls)语句就可达到清除上屏信息的功能。
五、总结
该程序主要用于哈夫曼编码,并在必要时保存数据。做法主要是用一个主函数MAIN,用它达到显示欢迎界面,提示选择操作与调用其它函数功能(用到Switch函数),这样使得程序简单,易读,运行效果也好。但由于能力有限,该程序在时间与空间复杂度上有待作改正。
参考文献:
(1) 刘振鹏、张小莉等编著;数据结构(第二版).中国铁道出版社。
(2) 石强、罗文浩等编著;数据结果习题解答与实验指导(第二版).中国铁道出版社。
(3) 刘克成 主编;C语言程序设计.中国铁道出版社。
附全部代码(正常运行VC++6.0):
#includestdio.h
#includeconio.h
#includestring.h
#includestdlib.h
#define MAXLEAF 27
#define MAXNODE MAXLEAF*2-1
#define MAXBIT 25
#define MAXVALUE 2000
#define H \t\t =======================================\n
typedef struct{
int parent;
int weight;
int lchild;
int rchild;
}hfm
原创力文档


文档评论(0)