数据结构 哈弗曼树的编译码 课程设计 实验报告.docVIP

数据结构 哈弗曼树的编译码 课程设计 实验报告.doc

  1. 1、本文档共16页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  5. 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  6. 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  7. 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  8. 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
数据结构 哈弗曼树的编译码 课程设计 实验报告

数 据 结 构 课 程 设 计 设计题目: 哈弗曼树的编译码 课题名称 哈弗曼树的编译码 院 系 年级专业 学 号 姓 名 成 绩 课题设计 目的与 设计意义 课题设计目的: (1)掌握哈弗曼树的基本概念及存储结构. (2)理解哈弗曼树的建立算法. (3)运用哈弗曼树进行编码和译码. 2、课题设计意义: (1)哈弗曼树的编译码具有较强的可应用性和实践性,在课程设计的过程中,不但有自己的独立思考,还有借助各种资料来帮助我们完成整个系统。 (2)通过设计此课程,让我们对老师课上的讲述有了更深的理解,让所学有所思。 (3)哈弗曼树的编译码具体应用在生活中,使我们明白了数据结构这一课程在实际生活中具有重要意义。 指导教师: 年 月 日 目 录 1 课程设计的目的和意义 1 2 需求分析 3 (1)问题描述: 3 (2)问题补充 3 (3)具体介绍 3 3系统设计 4 (1)设计思路及方案 4 (2)模块的设计与介绍 4 4系统调试: 8 (1):哈夫曼树的建立和编码的结果如图2: 8 (2):哈夫曼译码如图4: 8 5小 结 9 6参考文献 9 7附录 源程序 10 1 课程设计的目的和意义 在当今信息爆炸时代,如何采用有效的数据压缩技术来节省数据文件的存储空间和计算机网络的传送时间已越来越引起人们的重视。哈夫曼编码正是一种应用广泛且非常有效的数据压缩技术。 哈夫曼编码的应用很广泛,利用哈夫曼树求得的用于通信的二进制编码称为哈夫曼编码。树中从根到每个叶子都有一条路径,对路径上的各分支约定:指向左子树的分支表示“0”码,指向右子树的分支表示“1”码,取每条路径上的“0”或“1”的序列作为和各个对应的字符的编码,这就是哈夫曼编码。 通常我们把数据压缩的过程称为编码,解压缩的过程称为解码。电报通信是传递文字的二进制码形式的字符串。但在信息传递时,总希望总长度尽可能最短,即采用最短码。 作为信息管理专业的学生,我们应该很好的掌握这门技术。在课堂上,我们能学到许多的理论知识,但我们很少有过自己动手实践的机会!课程设计就是为解决这个问题提供了一个平台。 在课程设计过程中,我们每个人选择一个课题,认真研究,根据课堂讲授内容,消化课堂所讲解的内容;通过积累调试C程序的经验逐渐培养的编程能力、用计算机解决实际问题的能力。ChuffmanTree()函数构建哈夫曼树;并调用print1()和print2()函数将哈夫曼的存储结构的初态和终态进行输出。然后调用HuffmanEncoding()函数对哈夫曼树进行编码,调用coding()函数编码;再调用decode()对编码进行译码,再输出至界面。至此,整个工作就完成了。 图 1 主函数流程图 3系统设计 (1)设计思路及方案   本课题是用最优二叉树即是哈弗曼树来实现哈弗曼编译码。假设每个字符出现的次数,把次数与字符联系起来,建立哈夫曼数,再利用哈夫曼数得出哈夫曼编码,最后译码。 哈夫曼编译码模块图2 (2)模块的设计与介绍 ①建立哈弗曼树 1:根据给定的n个权值w1,w2,w3,......,wn构成n个二叉树的森林F={T1,T2,T3,......,Tn},其中每棵二叉树T1中都只有一个权值为w1的根结点。其左右子树均空。 2:在森林F中选出两棵根结点的权值最小的树(当这样的树不止两棵树时,可以从中任选两棵),将这两棵树合并成一棵树,为了保证新树仍是二叉树,需要增加一个新结点作为新树的根分别作为新树的左右孩子(谁左,谁右无关紧要),将左右孩子的权值之和作为新根的权值。 3:对新的森林F重复(2),直到森林F中只剩下一棵树为止。这棵树便是哈弗曼树。 #includestdio.h #define max 100 typedef struct {结构体定义 }hufmtree; hufmtree tree[100]; HUFFMAN(int n) { { int i,j,p1,p2; char c; float m1,m2,f; for(i=0;i2*n-1;i++) { 初始化 } printf(请输入对应的权值与字符); for(i=0;in;i++) { 读入前n个结点的权值 } for(j=n;j2*n-1;j++) { 对森林中的树进行合并 { 改变最小权,次小权的位置 } else if(tree[i].weightm2) { 改变次小权的位置 最小权根结点是新结点的左孩子,下标加1;次小权根结点是

文档评论(0)

153****9595 + 关注
实名认证
文档贡献者

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

1亿VIP精品文档

相关文档