收藏 分享(赏)

数据结构课程设计——赫夫曼编码.doc

上传人:jinchen 文档编号:5286558 上传时间:2019-02-18 格式:DOC 页数:15 大小:147.50KB
下载 相关 举报
数据结构课程设计——赫夫曼编码.doc_第1页
第1页 / 共15页
数据结构课程设计——赫夫曼编码.doc_第2页
第2页 / 共15页
数据结构课程设计——赫夫曼编码.doc_第3页
第3页 / 共15页
数据结构课程设计——赫夫曼编码.doc_第4页
第4页 / 共15页
数据结构课程设计——赫夫曼编码.doc_第5页
第5页 / 共15页
点击查看更多>>
资源描述

1、课 程 设 计 报 告课程设计名称:数据结构课程设计课程设计题目:哈夫曼编码问题 院(系):专 业:班 级:学 号:姓 名:指导教师:目录I 目 录1 课程设计介绍 11.1 课程设计内容与要求 .11.2 课程设计分析与描述 .12 系统功能模块结构图及功能介绍 .22.1 系统功能模块结构图 .22.2 模块功能介绍 .32.2.1 统计频数 32.2.2 建树 32.2.3 生成编码 33 使用的数据结构的描述 .43.1 栈 .43.2 二叉树 .54 主要函数的描述及流程图 .64.1 CREATHUFFAMNTREE()(创建哈夫曼树) .64.2 HUFFMANCODE()(生成

2、哈夫曼编码) 75 程序的测试与运行 .8参考文献 .10附 录(关键部分程序清单) .11第 1 章 课程设计介绍1 1 课程设计介绍1.1 课程设计内容与要求利用哈夫曼编码来解决由 A、B、C、D 四个字符组成的字符串子啊压缩时产生的译码二义性问题,对字符串进行编码时,其中任一字符的编码都不能是其他字符的前缀。即要求编码为前缀编码。实现:1:创建哈夫曼树的结构;2:生成哈夫曼编码;要求:1:使用 C 语言或其他面向对象语言实现;2:按要求写出课程设计报告;1.2 课程设计分析与描述根据问题的要求,我们需要做以下的工作:1 录入一字符串,统计 A、B、C、D 四个字符在字符串中出现的频数,把

3、它当作字符的权值;2 根据四个字符各自的权值建立哈夫曼树;3 根据已建立的哈夫曼树生成每个字符的哈夫曼编码;第 2 章 系统功能模块结构图及功能介绍2 2 系统功能模块结构图及功能介绍2.1 系统功能模块结构图本系统含有统计频数、建树、生成编码四个模块,各模块之间的关系如下图1 所示:图 1:模块图统计频数建树生成编码第 2 章 系统功能模块结构图及功能介绍3 2.2 模块功能介绍2.2.1 统计频数在给定的字符串中统计 A、B、C、D 四个字符在其中出现的频数,并且把它作为该字符的权值;2.2.2 建树根据各个字符的权值根据哈夫曼算法建立哈夫曼树;2.2.3 生成编码根据建立的哈夫曼树,生成

4、哈夫曼编码;第 3 章 使用的数据结构的描述4 3 使用的数据结构的描述3.1 栈栈的顺序存储表示:typedef structSElemType * base;/栈底SElemType * top;/栈顶int stacksize;/栈的容量SqStack;栈的用法说明:栈又称为后进先出的线性表(LIFO 结构) ,特点如下图 2 所示:出栈 进栈栈顶栈底图 2:栈的示意图第 3 章 使用的数据结构的描述5 3.2 二叉树二叉树的二叉链表存储表示:typedef struct BiTNodeint data;/数据域struct BiTNode * lchild,* rchild;/左、右孩

5、子BiTNode,* BiTree;二叉树的用法说明:二叉树是一种树型结构,特点是每个结点至多只有两棵子树(即二叉树中不存在度大于 2 的结点) ,并且,二叉树的子树有左右之分,其次序不能颠倒。如下图 3:BAC DE图 3:二叉树的示意图第 4 章 主要函数的描述与流程图6 4 主要函数的描述及流程图4.1 creatHuffamnTree()(创建哈夫曼树)集合 F:根据给定的 n 个权值 w1,w2,.wn构成 n 棵二叉树的集合F=T1,T2,Tn,其中每棵二叉树 Ti 中只有一个带权为 wi 的根节点,其左右子树均空。创建哈夫曼树的流程如下图 4 所示:开始F 中只含一棵树结束T在

6、F 中选取两棵根节点的权值最小的树作为左右子树构造一棵新的二叉树,且置新的二叉树的根节点的权值为其左右子树的根节点的权值之和F在 F 中删除这两棵树,同时将新得到的二叉树加入 F中图 4:创建哈夫曼树的流程图第 4 章 主要函数的描述与流程图7 4.2 huffmanCode()(生成哈夫曼编码)创建一空栈 S,让 T 指向哈夫曼树的根节点。生成哈夫曼编码的流程如下图 5 所示:开始T=NULL结束T-lchild=NULLp=minValue(Head,Tail);q=minValue(Head,Tail);/在其中找出两个权值最小的;if(q=NULL)return(p);if(!(H=(

7、BiTree)malloc(sizeof(BiTNode)exit(-1);H-data=p-data+q-data;H-lchild=p;H-rchild=q;/建立一个新结点,使其左右孩子为那两个结点,权值为二者之和;Tail+;*Tail=H;return(creatHuffmanTree(Head,Tail);Status huffmanCode(BiTree T,SqStack if(T=NULL)Pop(S,x);return(0);if(!T-lchild)while(ilchild,S,StackTraverse,H);Push(S,1);huffmanCode(T-rchil

8、d,S,StackTraverse,H);Pop(S,x);return(0);13 课程设计总结:通过此次课程设计,使我更加扎实的掌握了有关哈夫曼编码方面的知识,在设计过程中虽然遇到了一些问题,但经过一次又一次的思考,一遍又一遍的检查终于找出了原因所在,也暴露出了前期我在这方面的知识欠缺和经验不足。实践出真知,通过亲自动手编写和调试,使我们掌握的知识不再是纸上谈兵。我认为,在这学期的实验中,不仅培养了独立思考、动手操作的能力,在各种其它能力上也都有了提高。更重要的是,在课程设计中,我们学会了很多学习的方法。而这是日后最实用的,真的是受益匪浅。要面对社会的挑战,只有不断的学习、实践、再学习、再实践。这对于我们的将来也有很大的帮助。以后,不管有多苦,我想我们都能变苦为乐,找寻有趣的事情,发现其中珍贵的事情。就像中国提倡的艰苦奋斗一样,我们都可以在实验结束之后变的更加成熟,会面对需要面对的事情。指导教师评语:指导教师(签字): 年 月 日课程设计成绩

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 实用文档 > 课程设计

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报