数据结构实验四(哈弗曼编码)..docVIP

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

数据结构实验四实验报告 实验名称:哈弗曼编码 姓名:黄州龙 班级:08级软件工程A班 学号:082512102 需求分析 本实验涉及的算法思想是最优二叉树的构建,而该算法思想的实际应用广泛,哈弗曼编码就是这一算法的应用,通过本实验的练习,可以加深学生对二叉树的理解,学习如何将算法学以致用,并为以后应用中有所突破奠定基础; 实验程序是通过用户输入的哈弗曼编码频度表文件(.txt)路径,从硬盘中读取数据,并进一步使用哈弗曼编码算法进行哈弗曼树的构建,最后输出编码结果给用户,也可以选择将哈弗曼树存入文件保存起来; 实验程序可以实现对已知频度的码值进行编码的功能,具有一定的使用价值,编写的函数算法是完全可以被用在其他的软件程序中的,具有很好的代码复用性; 存储编码频度表的文件的结构: 首行是一个正整数N,表示有N个码 第二行是N个以空格隔开的字符,即N个码的码值,第三行是N个用空格隔开的非负整数,对应N个码值的频度; 测试数据; huffman1.txt 文件内容: 8 A B C D E F G H 12 50 52 60 34 80 21 4 huffman2.txt 文件内容: 6 V P K L Y M 20 10 30 40 60 40 huffman3.txt 文件内容: 26 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 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 huffman4.txt 文件内容: 9 I A M Z E P H Y R 9 8 7 6 5 4 3 2 1 概要设计 1、二叉链结点的定义 struct TreeNode { char data;//数据域,具体应用时可能是别的类型 int visit;//当前的访问状态 TreeNode * l;//左树域 TreeNode * r;//右树域 };//end of definition to TreeNode 2、创建森林和创建哈弗曼树模块 Status createForest(vectorTreeNode * forest,string filename) 初始条件:filename所指示的文件路径有效且文件内容符合格 式要求 参数:第一个参数传入用来存放每个码结点的地址的向量,第二个参数传入编码频度表文件的路径字符串 操作结果:从文件中读取数据并构建出码值二叉森林,为哈弗曼编码算法做准备 Status createHuffman(vectorTreeNode * forest) 初始条件:传入的码值森林已经初始化 参数:第一个参数传入码值森林所初始化的向量 操作结果:码值森林只剩一个结点,该结点是哈弗曼树的根结点 3、输出哈弗曼编码和输出哈弗曼树模块 void printHuffmanCode(TreeNode * root) 初始条件:传入的树根结点是有效的树根结点 参数:第一个参数传入哈弗曼树的根结点 操作结果:输出每个码值对应的哈弗曼编码 printTree(TreeNode * tn,int depth) 初始条件:传入的二叉树的根是有效的,传入的二叉树深度与二叉树相对应 参数:第一个参数传入要进行树形输出的二叉树的根结点 第二个根结点传入二叉树的深度 操作结果;将二叉树以树状进行输出,比较直观 详细设计 1、创建森林和创建哈弗曼树模块 Status createForest(vectorTreeNode * forest,string filename) { ifstream is(filename.c_str());//从路径字符串初始化文//件流 cout从文件中读取编码频度表......\n;//提示以开始//读取 int codenum=0; TreeNode *code=NULL; iscodenum;//读取码数 cout有codenum个编码.\n; for(int i=0;icodenum;i++)//根据结点数一次读入码值数//据并以此创建结点森林 { code=new TreeNode; if(!code)//创建结点,若失败则返回错误 return ERROR; iscode-data; while(code-dataA||code-dataZ) iscode-data; code-l=NULL; code-r=NUL

文档评论(0)

stzs + 关注
实名认证
文档贡献者

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

1亿VIP精品文档

相关文档