- 1、本文档共21页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
数据结构课设-赫夫曼树
目录
前言 1
正文 2
1课程设计目的 2
1.1课程设计目的 2
1.2课程设计 2
2设计方案论证 2
2.1 问题描述 2
2.1.1赫夫曼树的基本概念 2
2.1.2赫夫曼树的应用 3
2.1.3哈夫曼树在数据编码中的应用 4
2.2 数据结构设计 5
2.3.1功能模块图 6
2.3.2功能模块图思路设计 7
2.4 详细设计 8
2.4.2 算法设计 10
2.5设计程序 13
3 课程设计运行结果与分析 16
设计 17
参考文献 18
前言
数据结构课程主要是研究非数值计算的程序设计问题中所出现的计算机操作对象以及它们之间的关系的操作的学科。它是介于数学、计算机硬件之间的一门计算机专业的核心课程,是计算机程序设计、数据库、操作系统、编译原理及人工智能等的重要基础,广泛的应用于信息学、系统工程等各种领域。学习数据结构是为了将实际问题中所涉及的对象在计算机中表示出来并对它们进行处理。通过课程设计可以提高我们的思维能力,促进我们综合应用能力和专业素质的提高。随着计算机的普遍应用与日益发展,其应用早已不局限于简单的数值运算,而涉及到问题的分析、数据结构框架的设计以及设计最短路线等复杂的非数值处理和操作。
算法与数据结构的学习就是为以后利用计算机资源高效地开发非数值处理的计算机程序打下坚实的理论、方法和技术基础。算法与数据结构旨在分析研究计算机加工的数据对象的特性,以便选择适当的数据结构和存储结构,从而使建立在其上的解决问题的算法达到最优。
数据结构是在整个计算机科学与技术领域上广泛被使用的术语。它用来反映一个数据的内部构成,即一个数据由那些成分数据构成,以什么方式构成,呈什么结构。数据结构有逻辑上的数据结构和物理上的数据结构之分。逻辑上的数据结构反映成分数据之间的逻辑关系,而物理上的数据结构反映成分数据在计算机内部的存储安排。数据结构是数据存在的形式。 《数据结构》主要介绍一些最常用的数据结构,阐明各种数据结构内在的逻辑关系,讨论其在计算机中的存储表示,以及在其上进行各种运算时的实现算法,并对算法的效率进行简单的分析和讨论。数据结构是介于数学、计算机软件和计算机硬件之间的一门计算机专业的核心课程,它是计算机程序设计、数据库、操作系统、编译原理及人工智能等的重要基础,广泛的应用于信息学、系统工程等各种领域。学习数据结构是为了将实际问题中所涉及的对象在计算机中
此次课程设计通过对赫夫曼树的概念、构造算法的理解,进行建立赫夫曼树从而掌握赫夫曼树,同时了解赫夫曼树在解决实际问题中的重要地位。本文采用了数组和结构体结合的存储方式,通过对二叉树结点以及带权路径长度等的学习和探究,通过建立最优二叉树函数,实现了赫夫曼树的建立和输出的功能。
正文
1课程设计目的课程设计目的(1)掌握算法的编写方法。
(2)掌握C语言的算法转换成C程序并上机调试的基本方法。
(3)根据建立好的函数输入二叉树,对其输入的字符出现的频率作为权值输出其相对应的赫夫曼树。
课程设计
通过熟练使用c++语言编写程序,解决实际问题;了解并掌握数据结构与算法的设计方法,具备初步的独立分析和设计能力;初步掌握软件开发过程的问题分析、系统设计、程序编码、测试等基本方法和技能;提高综合运用所学的理论知识和方法独立分析和解决问题的能力;练习树和赫夫曼树的有关操作,和各个算法程序,理解赫夫曼树的构造与应用,熟悉赫夫曼树的基本操作,掌握赫夫曼树的实现以及实际应用。
2设计方案论证
2.1 问题描述
赫夫曼树的基本概念
相关概念:路径:从树中一个结点到另一个结点所经过的分支序列或者说结点序列。路径长度:路径上面的分支个数。树的路径长度:从树根到每一个结点的路径长度之和。结点的权值:在某些应用中,树中结点往往要和一定的数值联系起来,那么这个数值通常称为该结点的权值,简称权。结点的带权路径长度:该结点到根结点的路径长度与该结点上权的乘积。树的带权路径长度:树中所有叶子结点的带权路径长度之和。
最优二叉树(哈夫曼树):给定n个权值{w1,w2,…,wn},试构造一棵有n个叶子结点的二叉树,每个叶子结点带权为wi。构造出来的二叉树的形态可以有多个,我们把其中带权路径长度WPL最小的二叉树称作最优二叉树或者哈夫曼树。按照结构体来存放树的结点的权值,双亲、左孩子、右孩子。通过建立赫夫曼树函数输入二叉树,并输出其赫夫曼树各节点编码。
哈夫曼算法的语言描述
根据给定的n个权值{w1,w2,…,wn}构成n棵二叉树的集合F={T1,T2,…,Tn},其中每棵二叉树Ti中只有一个带权为wi的根结点,其左右子树为空。
在F中选取两棵根结点的权值最小的树作为左右子树构造一棵新的二叉树,且置新的二叉树的根结点的权值为其左右子树上根结点的权值之和。
在F中删除这两棵树
文档评论(0)