哈弗曼编译码实验报告.docxVIP

  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文档。上传文档
查看更多
哈弗曼编译码实验报告

工商学院数据结构实验报告年级: 12级学号: 2012484282 姓名:何晋成绩:专业:电气信息(计算机)实验地点:B3 401 指导教师:石强实验项目:简单哈弗曼编/译码的设计与实现实验日期:2013年11月2日一、【实验目的】为了更深一步了解二叉树的应用,应用哈弗曼树来体会编码和译码特点,从而进一步使用理论知识指导解决实际问题的能力。二、【问题描述】利用哈夫曼编码进行通信可以大大提高信道利用率,缩短信息传输时间,降低传输成本。但是,这要求在发送端通过一个编码系统对待传数据预先编码,在接收端将传来的数据进行译码,此实验即设计这样的一个简单编/码系统。系统应该具有如下的几个功能:1、接收原始数据。从终端读入字符集大小n,以及n个字符和n个权值,建立哈夫曼树,并将它存于文件htmTree.txt中。 2、编码。利用已建好的哈夫曼树(如不在内存,则从文件htmTree.txt中读入),对文件中的正文进行编码,然后将结果存入文件codefile.txt中。3、译码。利用已建好的哈夫曼树将文件codefile.txt中的代码进行译码,结果存入文件Textfile.txt中。4、打印编码规则。即字符与编码的一一对应关系。5、打印哈夫曼树,将已在内存中的哈夫曼树以直观的方式显示在终端上。三、【数据结构设计】构造哈夫曼树时使用静态链表作为哈夫曼树的存储。在构造哈夫曼树时,设计一个结构体数组HTNode保存哈夫曼树中各结点的信息,根据二叉树的性质可知,具有n个叶子结点的哈夫曼树共有2n-1个结点,所以数组HTNode的大小设置为2n-1,描述结点的数据类型为:typedefstruct{int weight; //权值int parent; //父节点,intlchild; //左孩子结点,intrchild; //右孩子结点}HTNode,* HuffmanTree;四、【功能(函数)设计】1.赫夫曼树抽象数据类型定义ADT HuffmanCoding{数据对象T:具有相同特性的数据元素的集合数据关系R:满足最优二叉树的关系基本操作P:Init(t)操作结果:构造一个空赫夫曼树t。encode()操作结果:利用赫夫曼树进行编码Decode()操作结果:利用赫夫曼树进行译码}2. 主函数Void mian(){打印表头;While(选择项不为0){输入选择项;Switch(选择项){Case 1:初始化;break;Case 2:输入要编码的字符; break;Case 3:编码字符; break;Case 4;译码操作;break;Case 5;打印代码;break;Case 6;打印赫夫曼树; break;Default:输入错误,重新选择;}3. 求赫夫曼编码if(t[j].weightkt[j].parent==0) k=t[j].weight,flag=j; //flag为标志符,为不小于可能的值t[flag].parent=1;4. 建赫夫曼树 HT[s1].parent=HT[s2].parent=i;//将选好的两个结点设置成有同一个双亲结点 HT[i].lchild=s1;//左孩子的权值 HT[i].rchild=s2;//右孩子的权值 HT[i].weight=HT[s1].weight+HT[s2].weight;//将两个权值相加作为新的权值 } HC=(HuffmanCode)malloc((n+1)*sizeof(char*));//为赫夫曼代码分配空间5. 将赫夫曼编码写入文件用fputs(HC[i],htmTree); fputs(r,htmTree);fclose(htmTree)这些函数来实现编码写入文件;6. 完成译码功能并将译码写入文件因为赫夫曼树建好后是左孩子结点旁标上0,右孩子结点上标上1所以碰到1是用左孩子结点,2是用右孩子结点,可以用条件语句来实现。if(i2==0) m=HT[m].lchild;if(i2==1) m=HT[m].rchild;fputs(outext,txtfile);//将译码写入文件五、【运行与测试】1、令叶子结点个数n为4,权值集合为{1,3,5,7},字符集合为{A,B,C,D},并有如下对应关系,A――1、B――3,C――5,D――7,调用初始化功能模块可以正确接收这些数据。2、调用建立哈夫曼树的功能模块,构造静态链表HTNode的存储。3

文档评论(0)

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

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

1亿VIP精品文档

相关文档