ImageVerifierCode 换一换
格式:DOCX , 页数:31 ,大小:237.62KB ,
资源ID:16171105      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/16171105.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(数据结构课程设计之赫夫曼编译码器数Word文件下载.docx)为本站会员(b****5)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

数据结构课程设计之赫夫曼编译码器数Word文件下载.docx

1、年 月 日教研室意见:学生(签字):接受任务时间: 年 月 日注:任务书由指导教师填写。课程设计(论文)指导教师成绩评定表题目名称评分项目分值得分评价内涵工作表现20%01学习态度6遵守各项纪律,工作刻苦努力,具有良好的科学工作态度。02科学实践、调研7通过实验、试验、查阅文献、深入生产实践等渠道获取与课程设计有关的材料。03课题工作量按期圆满完成规定的任务,工作量饱满。能力水平35%04综合运用知识的能力10能运用所学知识和技能去发现与解决实际问题,能正确处理实验数据,能对课题进行理论分析,得出有价值的结论。05应用文献的能力5能独立查阅相关文献和从事其他调研;能提出并较好地论述课题的实施方

2、案;有收集、加工各种信息及获取新知识的能力。06设计(实验)能力,方案的设计能力能正确设计实验方案,独立进行装置安装、调试、操作等实验工作,数据正确、可靠;研究思路清晰、完整。07计算及计算机应用能力具有较强的数据运算与处理能力;能运用计算机进行资料搜集、加工、处理和辅助设计等。08对计算或实验结果的分析能力(综合分析能力、技术经济分析能力)具有较强的数据收集、分析、处理、综合的能力。成果质量45%09插图(或图纸)质量、篇幅、设计(论文)规范化程度符合本专业相关规范或规定要求;规范化符合本文件第五条要求。设计说明书(论文)质量30综述简练完整,有见解;立论正确,论述充分,结论严谨合理;实验正

3、确,分析处理科学。11创新对前人工作有改进或突破,或有独特见解。成绩指导教师评语指导教师签名: 年月日摘要在本次课程设计过程中我主要根据课本中的实现思想及算法编写程序,体现以课本知识的应用为主,在学习了线性表、栈、队列、二叉树、树和图等结构的基础上,以能够更加熟练的应用所学知识,并能结合一些著名算法来实现对一些实际问题的应用,例如,赫夫曼树等,从而更为深刻理解数据结构的内涵,熟悉它们各自的应用场合及方法。有些在平时课程中并没有掌握的内容在这次课程设计中都是先通过看课本学懂了,然后再在课程设计中加深印象,实现算法的应用和扩展。这次课程设计的设计内容主要是通过实际的例子和程序来实现课本中所学习的算

4、法的应用。程序设计设计语言采用C+,程序运行平台为Windows XP。赫夫曼编译码器的主要功能是先建立赫夫曼树,然后利用建好的赫夫曼树生成哈夫曼编码后进行译码 。目前,利用赫夫曼编码可以进行快速远距离通信的主要手段是电报,即将需传送的文字转换成由二进制的字符组成的字符串。赫夫曼编译系统分为五个功能模块:原始数据载入,打印编码规则、编码、译码。以二叉树的应用为基础,包括统计信息,并通过构建赫夫曼树、对信息进行赫夫曼编码,将编码信息等存入文档。关键字 数据结构,栈和队列,赫夫曼树,赫夫曼编码 1引言.11.1课程设计目的.1 1.2课程设计背景.11.3课程设计主要内容.22方案设计.33 算法

5、设计.43.1 设计思想43.2 函数间的关系43.3数据结构与算法设计54详细设计.6 4.1 赫夫曼的主要结构.65 调试分析.86 测试并列出测试结果.9 6.1 测试方式 9 6.2 测试结果107 总结14致谢.15参考文献.15附录.161 引言当今社会,计算机技术和通信技术已不断发展,处理和传输的数据量越来越庞大。如何采用有效的数据压缩技术引起了人们的极大重视。从而产生了哈夫曼编码,它是一种应用广泛且非常有效的数据压缩技术,该技术一般可将数据压缩20%至90%,通常我们将压缩技术称为编码,解压缩过程称为解码。树状结构简称为树,是一种以分支关系进行定义的层次结构,是十分重要的非线性

6、数据结构,在计算机软件设计方面,有着广泛的应用。1.1 课程设计目的 本课程设计是为了让同学们了解数据结构的作用和意义。数据结构是计算机科学与技术专业、计算机信息管理与应用专业和电子商务的专业的基础课,是十分重要的课程。所有的计算机系统软件和应用软件都要用到各种类型的数据结构。因此,想要更好地运用计算机来解决实际问题,仅掌握几种计算机程序设计语言是难以应付当前众多复杂的课题,想要有效地使用计算机,充分发挥它的性能,还必须学习和掌握好数据结构的有关知识,打好数据结构这门课的扎实基础,对于学习计算机专业的其他课程,如操作系统、软件工程、编译原理、人工智能等十分有益。1.2 课程设计背景在这信息量发

7、达的时代,随着社会的进步,信息不断地增多和更新,为了使信息更加快速、准确有的传递。需要一个程序来完成。11.3课程设计主要内容本课程设计要求完成发送端对待传送数据的编码和接收端对传送来的数据的译码。要实现五个功能:接受原始数据、编码、译码、打印编码规则、将编码、译码存档。通过系统的提示要建立哈夫曼树并对载入的原文件进行编码,并保存到txtfile.txt文件中,同时输出到屏幕。最后将建立的赫夫曼树用某种树的储存方式储存后输出。22 方案设计一套完整的编码译码系统应该具有以下功能:(1)I:初始化(initialization)。从终端读入字符集大小n,以及n个字符和n个权值,建立赫夫曼树。并将

8、他存于文件hfmtree.txt中。(2)E:编码(encoding)。利用已经建立好的赫夫曼树(如不在内存,则从文件hfmtree.txt中读入),对文件tobetree.txt中的正文进行编码。然后将结果存入文件codefile.txt文件中。(3)D:译码(decoding)。利用已经建立好的赫夫曼树将文件codefile.txt中的代码进行译码,将结果存入文件textfile.txt中。(4)P:印代码文件(print)。将文件codefile.txt以紧凑格式显示在终端上。每行50个代码。同时将字符形式的编码文件写入到文件codeprin.txt中。(5)T:印赫夫曼树(treepr

9、int)。将已在内存中的赫夫曼树以直观的方式(树或凹入表形式)显示在终端上,同时将此字符形式的赫夫曼树写入文件treeprin.txt中。33 算法设计3.1 设计思想赫夫曼树用邻接矩阵作为存储结构,借助静态链表来实现遍历。3.2 函数间的关系 函数间的关系如图3.1所示:图3.1 函数间的关系3.3 数据结构与算法设计赫夫曼编译码器的主要功能是先建立赫夫曼树,然后利用建好的赫夫曼树生成赫夫曼编码后进行译码 。在数据通信中,经常需要将传送的文字转换成由二进制字符0、1组成的二进制串,称之为编码。构造一棵赫夫曼树,规定赫夫曼树中的左分之代表0,右分支代表1,则从根节点到每个叶子节点所经过的路径分

10、支组成的0和1的序列便为该节点对应字符的编码,称之为赫夫曼编码。最简单的二进制编码方式是等长编码。若采用不等长编码,让出现频率高的字符具有较短的编码,让出现频率低的字符具有较长的编码,这样可能缩短传送电文的总长度。赫夫曼树课用于构造使电文的编码总长最短的编码方案。其主要流程图如图3.2所示:4图3.2 赫夫曼树编译码器流程图4 详细设计赫夫曼树编、译码设计功能如下:1赫夫曼树抽象数据类型定义ADT HuffmanCoding数据对象T:具有相同特性的数据元素的集合数据关系R:满足最优二叉树的关系基本操作P:Init(&t)操作结果:构造一个空赫夫曼树t。encode()利用赫夫曼树进行编码De

11、code()利用赫夫曼树进行译码2. 主函数Void mian()打印表头;While(选择项不为q)输入选择项;Switch(选择项)Case i: 初始化;break;Case w: 输入要编码的字符; break;Case e: 编码字符;Case d; 译码操作;break;Case p; 打印代码;Case t; 打印赫夫曼树;Default:输入错误,重新选择;3. 求赫夫曼编码5if(tj.weightk&tj.parent=0) k=tj.weight,flag=j; /flag为标志符,为不小于可能的值tflag.parent=1;4. 建赫夫曼树 HTs1.parent=H

12、Ts2.parent=i;/将选好的两个结点设置成有同一个双亲结点 HTi.lchild=s1;/左孩子的权值 HTi.rchild=s2;/右孩子的权值 HTi.weight=HTs1.weight+HTs2.weight;/将两个权值相加作为新的权值 HC=(HuffmanCode)malloc(n+1)*sizeof(char*);/为赫夫曼代码分配空间 5. 将赫夫曼编码写入文件用fputs(HCi,htmTree); fputs(r,htmTree);fclose(htmTree) 这些函数来实现编码写入文件;6. 完成译码功能并将译码写入文件 因为赫夫曼树建好后是左孩子结点旁标上0

13、,右孩子结点上标上1所以碰到1是用左孩子结点,2是用右孩子结点,可以用条件语句来实现。 if(i2=0) m=HTm.lchild; if(i2=1) m=HTm.rchild;fputs(outext,txtfile);/将译码写入文件5 调试分析1本程序要执行首先要初始化一个赫夫曼树,按照用户设定的字符集大小,输入每个字符及其对应的出现概率即权值。分别存放在w和z这两个变量中。再利用这两个变量构造赫夫曼树。2执行输入字符命令时,程序将用户输入的字符存入文件tobetran.txt中。以便执行下一步编码操作时自己从文件调用。3编码时,程序直接从tobetran.txt中读取字符,依次和字符数

14、组变量z中元素项比较,找到之后,将编码表HC中对应编号的代码添加到分配的工作区间中,全部字符编码完成后将代码写入文件codefile.txt中。4译码时,程序从codefile中读取代码,按照代码从树根开始向叶子节点查找对应的字符,直到全部代码译码完成,再将译好的字符写入文件txtfile.txt中5打印编码操作,即从codefile.txt中读取代码,按要求输出到屏幕上。86 测试并列出测试结果6.1 测试方式 1程序运行环境为DOS,执行文件为:xzl的程序设计.exe2程序运行后,出现的界面如图6.1所示:图6.1 界面图3首先须进行初始化,按“i”执行,并输入节点数 9 图6.2初始化

15、输入字符集数,对应的字符和权值,初始化赫夫曼树。然后才能进行后续的操作。4选择“w”,输入要编码的字符。5选择“e”,对刚输入的字符进行编码。6选择“d”,对刚编码出的代码再译码回去。7选择“p”,打印编码出的代码。8选择“t”,代印赫夫曼树9选择“q”,退出程序。6.2 测试结果1.初始化的内容如表6.1所示:表6.1 初始化的内容“”ABCDEFGHIJKLMN186641322321032115475720OPQRSTUVWXYZ6348802318162.初始化的结果如图6.3所示:图6.3 初始化的结果3.将字符对应编码写入htmtree.txt,如图6.4所示:图6.4 将字符写入

16、文件4.字符对应的编码如图6.5所示:图6.5字符对应的编码5.输入要编码的字符如图6.6所示:图6.6 要编码的字符6.编码:图6.7编码操作6.译码:文件textfile.txt中内容:THIS PROGRAM IS MY FAVORIT其操作如图6.6所示:图6.7 译码操作7打印编码:图6.8打印编码操作127.打印赫夫曼树如图6.8所示:图6.9赫夫曼树7 总 结我通过将近一周的数据结构课程设计论文的学习,从中认识到怎样将知识迁移运用,深刻的知道了理论应用和实际相互间的密切联系,感受到了理论知识的重要,在今后的学习中一定会更加努力,认真,并且将理论与实践相结合。在做这个课程设计论文的

17、时候,我遇到过许多的问题,比如说,写程序以及调试程序时,有很多地方的错误都搞不懂,不过在老师的帮助下,我成功的调试出了程序,并运行出了结果,当时我感觉非常有成就感。还有就是论文格式上,自己确实也有很多大一时学的东西都忘了,不过我通过问同学、老师以及网上XX,最终我还是把它搞懂了,总之,觉得这门课程我收获了很多课堂外不能学到的东西。非常让我受益匪浅!通过这门课程的学习,我确实体会到了自己的知识还有很多不足之处和个人能力的十分有限,只有通过同学、老师间的密切配合才能完成一项不错的工作。不过从中我也体会到了在学习中也有无限的乐趣,可以将现实生活中某一问题用程序编写出来并将以调试,得出结果。最后,在这

18、里,我要十分感谢帮助过我的周老师和同学,是你们才让我顺利、成功的做出了这个课程设计!14致 谢在课程设计过程中遇到了很多问题,不过在周老师和和同学们的帮助下大部分都得以解决,首先要对他们表示感谢。同时,我们也要感谢学校为我们提供了大量的图书以及设备,通过看书我们也学到了很多课堂上学不到的东西。通过此次课程设计,我最大的收获是学会了自主学习,懂得了怎样运用c语言已经所学的数据结构知识相结合去实现不同问题的编程,也增进了与老师和同学们的交流、增进了相互之间的感情。同时,对论文的格式要求有了更进一步的了解与掌握。参考文献1严蔚敏,吴伟民.数据结构:C语言版. 北京:清华大学出版社,19972王昆仑,

19、李红.数据结构与算法.北京:中国铁道出版社 3周霭如,林伟健.C+程序设计基础. 北京:电子工业出版社, 20054耿国华.数据结构. 北京:高等教育出版社, 20055 王卫东. 数据结构辅导课. 西安: 电子科技大学出版社, 2001年6 赵文静. 数据结构辅导. 西安:交通大学出版社, 1999年7刘大有等,数据结构(C语言版),高等教育出版社8严蔚敏等,数据结构(C语言版),清华大学出版社9William Ford,William Topp,Data Structure with C+清华大学出版社10苏仕华等,数据结构课程设计,机械工业出版社附录程序清单如下:#include iom

20、anip.hstring.hmalloc.hstdio.h/typedef int TElemType;const int UINT_MAX=1000;typedef struct int weight; /权值 int parent,lchild,rchild; /父节点,左孩子结点,右孩子结点HTNode,* HuffmanTree;typedef char *HuffmanCode;/-全局变量-HuffmanTree HT; /代表赫夫曼树HuffmanCode HC; /代表赫夫曼编码int *w,i,j,n;char *z;int flag=0;int numb=0;/ -求赫夫曼

21、编码-void line()coutn-n;int min(HuffmanTree t,int i) int j,flag; int k=UINT_MAX; / 取k为不小于可能的值 for(j=1;j=i;j+) if(tj.weights2)/ s1为最小的两个值中序号小的那个 j=s1; s1=s2; s2=j;void HuffmanCoding(HuffmanTree &HT,HuffmanCode &HC,int *w,int n) int m,i,s1,s2,start; int c,f; HuffmanTree p; char *cd; if(n=1) return; m=2*n-1; HT=(HuffmanTree)malloc(m+1)*sizeof(HTNode); / 0号单元未用 for(p=HT+1,i=1;iweight=*w;parent=0;lchild=0;rchild=0; for(;=m;+i,+p) for(i=n+1;+i) / 建赫夫曼树 select(HT,i-1,s1,s2); cd=(char*)malloc(n*sizeof(char); cdn-1=0 for(i=1;i+) start=n-1; for(c=i,f=HTi.parent;f!=0;

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1