数据结构课程设计实验报告赫夫曼编码12.doc

数据结构课程设计实验报告赫夫曼编码12.doc

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
数据结构课程设计 哈夫曼编码 学 院:计算机科学与技术学院 专 业:计算机科学与技术 学 生: 学 号: 指导教师: 2013年4月16日 目录 课程设计的目的、功能及要求--------------1 主要功能模块流程图----------------------2 算法的基本思想--------------------------3 系统测试--------------------------------6 结论------------------------------------7 源程序----------------------------------8 一、课程设计的目的、功能及要求 目的: 解并掌握数据结构与算法的设计方法,具备初步的独立分析和设计能力; 件开发过程的问题分析、系统设计、程序编码、测试等基本方法和技能; .合运用所学的理论知识和方法独立分析和解决问题的能力; 用系统的观点和软件开发一般规范进行软件开发,培养软件工作者所应具备的科学的工作方法和作风。 功能: 1首先读入待压缩源文件; 2然后建立并分析字母表,对每种字符的出现频度进行统计,以频度作为建立Huffman 树的权值; 3频度表建好后,就可以根据算法建立Huffman 树,对出现的每种字符进行Huffman编码; 4此时,再次读入源文件,逐字节编码,将得到的编码流写入到磁盘文件,并且计算压缩率。 要求: 1、核心数据结构用到的结构体要采用动态内存分配和链表结构。 2 、不同的功能使用不同的函数实现(模块化),对每个函数的功能和调用接口要注释清楚。对程序其它部分也进行必要的注释。 3 、对系统进行功能模块分析、画出总流程图和各模块流程图。 、用户界面要求使用方便、简洁明了、美观大方、格式统一。 所有程序需调试通过。 二、主要功能模块流程图 三、算法的基本思想 (1)构造Hufffman树的方法—Hufffman算法 构造Huffman树步骤: 根据给定的n个权值{w1,w2,……wn},构造n棵只有根结点的二叉树,令起权值为wj。 在森林中选取两棵根结点权值最小的树作左右子树,构造一棵新的二叉树,置新二叉树根结点权值为其左右子树根结点权值之和 在森林中删除这两棵树,同时将新得到的二叉树加入森林中。 重复上述两步,直到只含一棵树为止,这棵树即哈夫曼树。 (2)Huffman编码:数据通信用的二进制编码 思想:根据字符出现频率编码,使电文总长最短 编码:根据字符出现频率构造Huffman树,然后将树中结点引向其左孩子的分支标“0”,引向其右孩子的分支标“1”;每个字符的编码即为从根到每个叶子的路径上得到的0、1序列。 流程图: 部分程序: 构造哈夫曼树 void HaffmanTree(HNodeType HuffNode[MAXNODE]) { int i,j,m1,m2,x1,x2; for(i=0;iMAXNODE;i++) { HuffNode[i].parent=-1; HuffNode[i].lchild=-1; HuffNode[i].rchild=-1; } for(i=0;inum-1;i++) { m1=m2=MAXVALUE; x1=x2=0; for(j=0;jnum+i;j++) { if(HuffNode[j].parent==-1HuffNode[j].weightm1) { m2=m1; x2=x1; m1=HuffNode[j].weight; x1=j; } else if(HuffNode[j].parent==-1HuffNode[j].weightm2) { m2=HuffNode[j].weight; x2=j; } } HuffNode[x1].parent=num+i; HuffNode[x2].parent=num+i; HuffNode[num+i].weight=HuffNode[x1].weight+HuffNode[x2].weight; HuffNode[num+i].lchild=x1; HuffNode[num+i].rchild=x2; } } (2)哈夫曼编码 LinkList Bianma(LinkList l,Code c

文档评论(0)

xingyuxiaxiang + 关注
实名认证
内容提供者

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

1亿VIP精品文档

相关文档