- 1、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
第6章 树和 与二叉树 数据结构课件.ppt
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * 3. 哈夫曼树的应用 (1) 用于最佳判断过程。在考查课记分时往往把百分制转换成优(x≥90)、良(80x90)、中(70≤x80)、及格(60≤x70)、不及格(x60)五个等级。若不考虑学生考试分数的分布概率,程序判定过程很容易写成图6.23(a)所示的方法。我们知道,一般来讲学生考分大多分布在70~80分之间,从图6.23(a)可看出这种情况的x值要比较2~3次才能确定等级。而学生中考试不及格的人数很少,x值比较一次即可定等级。能否使出现次数多的在70~80分之间的x值比较次数减少些,而使很少出现的低于60分的x值比较次数多一些,以便提高程序的运行效率呢?假设学生成绩对于不及格、及格、中等、良好和优秀的分布概率分别为5%,15%,40%,30%,10%,以它们做为叶子的权值来构造哈夫曼树,如图6.23(b)所示。 此时带权路径长度最短,其值为205%。它可以使大部分的分数值经过较少的比较次数得到相应的等级。但是,事物往往不是绝对的,此时每个判断框内的条件较为复杂,比较两次,反而降低运行效率。所以我们采用折衷做法,调整后得图6.23(c)判定树。它更加切合实际。 图6.23 五分制不同规定 (2) 用于通信编码。在通信及数据传输中多采用二进制编码。为了使电文尽可能的缩短,可以对电文中每个字符出现的次数进行统计。设法让出现次数多的字符的二进制码短些,而让那些很少出现的字符的二进制码长一些。假设有一段电文,其中用到4个不同字符A、C、S、T,它们在电文中出现的次数分别为7、2、4、5。把7、2、4、5当做四个叶子的权值构造哈夫曼树如图6.24(a)所示。在树中令所有左分支取编码为0,令所有右分支取编码为1。将从根结点起到某个叶子结点路径上的各左、右分支的编码顺序排列,就得这个叶子结点所代表的字符的二进制编码,如图6.24(b)所示。 图6.24 哈夫曼编码 6.7 有关二叉树实现的C语言源程序 6.7.1 二叉树的建立和遍历 在讨论了二叉树的各种算法之后,现在来构造设计完整的源程序。下列程序包含了丰富的内容,有利于拓宽视野,综合运用所学习的知识。在程序中增加了一个新的二叉树建立算法,提供了辅助于非递归遍历、按层二叉树的栈和队列的主要算法。读者可以从下列程序中选取少数几个函数模块(一个建立函数、一个递归遍历函数)进行上机练习。 # include stdio.h # include stdlib.h # define MAXSIZE 20 typedef int ElemType; typedef struct BNode /*二叉树结点结构*/ { ElemType data; struct BNode *lch, *rch; }BNode; typedef struct /*栈的顺序存储结构,服务于中序非递归遍历*/ { BNode *a[MAXSIZE]; int top; } sqstack; typedef struct /*循环队列顺序存储结构,服务于二叉树的按层遍历*/ { BNode *elem[MAXSIZE]; ? int front,rear; }squeue; BNode *creat_bt0(?); BNode *creat_bt1(?); void preorder(BNode *p); void inorder(BNode *p); void inorder2(BNode *t); void anceng(BNode *t); void push(sqstack *s,BNode *x); BNode *pop(sqstack *s); void enqueue(squeue *Q,BNode *x); BNode *deletqueue(squeue *Q); BNode *t, *p, *q;int z,i,j,k,e; main(?) { do { printf(\n\n); printf(\n\n 0. 建立二叉树(方法0) ); printf(\n\n 1. 建立二叉树(方法1 )); pri
您可能关注的文档
- 第5章 进出口商品的检验和 与检疫 进出口商品检验检疫 报检课件.ppt
- 第5章 麻醉病人的护理知识 外科护理知识课件.ppt
- 第5章-工业机器人 先进制造技术知识课件.ppt
- 第5章_JSP技术知识 试验设计与数据处理教案(第二版)课件.ppt
- 第5章_常用传感器 测试技术知识.ppt
- 第5章_常用电器 《电工电子技术知识与技能》课件.ppt
- 第5章_新闻职业道德的核心理念新闻法规和 与新闻职业道德 .ppt
- 第5章_时序逻辑电路 《数字电子技术知识基础》课件.ppt
- 第5章 劳动法和 与劳动合同法律制度 《建设法规》.ppt
- 第5章 图像变换技术知识 MATLAB 数字图像处理课件.ppt
- 第6章 磁路与变压器 电工电子技术知识.ppt
- 第6章 线天线 《微波技术知识与天线(第2版)》课件.ppt
- 第6章 网络市场调研 《网络营与销学》.ppt
- 第6章 螺纹联接和 与螺旋传动《机械基础》课件.ppt
- 第6章 计算机网络基础和 与Internet应用 大学计算机基础.ppt
- 第6章 计量标准(国标、企标)概述 《测控技术知识与仪器专业导论》课件.ppt
- 第6章 通风和 与空调系统 《建筑设备工程》.ppt
- 第6章 防火墙技术知识 网络维护与安全技术知识教程与实训电子教案.ppt
- 第6章 隧道施工组织设计与施工相关管理 《隧道工程施工》.ppt
- 第6章 食品良好操作规范(GMP) 食品质量安全相关管理和监督 .ppt
文档评论(0)