- 1、本文档共31页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
* 4.1树与树的表示 树型结构是一类非常重要的非线性结构。直观地,树型结构是以分支关系定义的层次结构。 树在计算机领域中也有着广泛的应用,例如在编译程序中,用树来表示源程序的语法结构;在数据库系统中,可用树来组织信息;在分析算法的行为时,可用树来描述其执行过程等等。 本章将详细讨论树和二叉树数据结构,主要介绍树和二叉树的概念、术语,二叉树的遍历算法。树和二叉树的各种存储结构以及建立在各种存储结构上的操作及应用等。 什么是树 客观世界中许多事物存在层次关系 ?人类社会家谱 ?社会组织结构 ?图书信息管理 什么是树 分层次组织在管理上具有更高的效率! 数据管理的基本操作之一:查找 如何实现有效率的查找? 查找(Searching) 查找:根据某个给定关键字K ,从集合R中找出关键字与K相同的记录 静态查找:集合中记录是固定的 ? 没有插入和删除操作,只有查找 动态查找:集合中记录是动态变化的 除查找,还可能发生插入和删除 4 5 6 8 9 静态查找 0 K 方法1:顺序查找(数组存储) Tbl 10 1 2 3 int SequentialSearch (StaticTable *Tbl, ElementType K) { /*在表Tbl[1]~Tbl[n]中查找关键字为K的数据元素*/ } int i; Tbl-Element[0] = K; /*建立哨兵*/ for(i = Tbl-Length; Tbl-Element[i]!= K; i--); return i; /*查找成功返回所在单元下标;不成功返回0*/ 顺序查找算法的时间复杂度为O(n)。 7 10 方法2:二分查找(Binary Search) ? 假设n个数据元素的关键字满足有序(比如:小到大) 并且是连续存放(数组),那么可以进行二分查找。 [例] 假设有13个数据元素,按关键字由小到大顺序存放. 二分查找关健字为444的数据元素过程如下: 5 16 39 45 51 98 100 202 226 321 368 444 501 1 2 3 4 5 6 7 8 9 10 11 12 13 1、left = 1, right = 13; mid = (1+13)/2 = 7: 2、left = mid+1=8, right = 13; mid = (8+13)/2 = 10: 100 444; 321 444; 3、left = mid+1=11, right = 13; mid = (11+13)/2 = 12: 查找结束; 二分查找算法 int BinarySearch ( StaticTable * Tbl, ElementType K) { /*在表Tbl中查找关键字为K的数据元素*/ int left, right, mid, NoFound=-1; left = 1; right = Tbl-Length; /*初始左边界*/ /*初始右边界*/ while ( left = right ) { mid = (left+right)/2; /*计算中间元素坐标*/ if( K Tbl-Element[mid]) right = mid-1; /*调整右边界*/ else if( K Tbl-Element[mid]) left = mid+1; /*调整左边界*/ else return mid; } return NotFound; /*查找成功,返回数据元素的下标*/ /*查找不成功,返回-1*/ } ? 二分查找算法具有对数的时间复杂度O(logN) [例] 仍然以上面13个数据元素构成的有序线性表为例 二分查找关健字为 43 的数据元素如下: 5 16 39 45 51 98 100 202 226 321 368 444 501 1 2 3 4 5 6 7 8 9 10 11 12 13 1、left = 1, right = 13; mid = (1+13)/2 = 7: 100 43; 2、 left = 1, right = mid-1= 6; mid = (1+6)/2 = 3: 39 43; 3、left = mid+1=4, right = 6; mid = (4+6)/2 = 5: 51 43; 4、left = 4, right = mid-1= 4; mid = (4+4)/2 = 4: 45 43; 5、left = 4, right = mid-1= 3; left rig
文档评论(0)