第九章 查找0805第.pptVIP

  1. 1、本文档共95页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  5. 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  6. 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  7. 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  8. 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
第九章 查找 查找——也叫检索,是根据给定的某个值,在表中确定一个关键字等于给定值的记录或数据元素 查找表: 由具有同一类型(属性)的数据元素(记录)组成的集合。 关键字:是数据元素(记录)中某个数据项或组合项的值,用它可以标识一个数据元素(记录)。 能唯一确定一个数据元素(记录)的关键字,称为主关键字; 不能唯一确定一个数据元素(记录)的关键字,称为次关键字。 9.1 静态查找表 9.1.1 顺序表的查找 查找过程:对给定的一关键字K,从线性表的一端开始,逐个进行记录的关键字和K的比较,直到找到关键字等于K的记录或到达表的另一端 9.1.2 有序表的查找 有序表即是表中数据元素按关键字升序或降序排列。 有序表---折半查找---基本思想:在有序表中,取中间元素作为比较对象,若给定值与中间元素的关键字相等,则查找成功;若给定值小于中间元素的关键字,则在中间元素的左半区继续查找;若给定值大于中间元素的关键字,则在中间元素的右半区继续查找。不断重复上述查找过程,直到查找成功,或所查找的区域无数据元素,查找失败。 算法实现 设表长为n,low、high和mid分别指向待查元素所在区间的上界、下界和中点,key为给定值 初始时,令low=1,high=n,mid=?(low+high)/2? 让k与mid指向的记录比较 若key==r[mid].key,查找成功 若keyr[mid].key,则high=mid-1 若keyr[mid].key,则low=mid+1 重复上述操作,直至lowhigh时,查找失败 算法描述 9.1.4 索引顺序表的查找(分块查找) 适用条件:分块有序表 索引顺序表:在查找表基础之上,建立索引表(包含关键字项和指针项) 查找过程:将表分成几块,块内无序,块间有序;先确定待查记录所在块,再在块内查找 算法实现 用数组存放待查记录,每个数据元素至少含有关键字域 建立索引表,每个索引表结点含有最大关键字域和指向本块第一个结点的指针 算法描述 分块查找方法评价 9.2 动态查找表 若左子树不空,则左子树上所有结点的值均小于根结点的值; 若右子树不空,则右子树上所有结点的值均大于根结点的值。 左右子树也都是二叉排序树。 3、二叉排序树查找过程   从其定义可见,二叉排序树的查找过程为:  ① 若查找树为空,查找失败。  ② 查找树非空,将给定值key与查找树的根结点关键字比较。   1)若相等,查找成功,结束查找过程, 2)否则: a.当给key小于根结点关键字,查找将在以左子女为根的子树上继续进行,转① b.当给key大于根结点关键字,查找将在以右子女为根的子树上继续进行,转① 查找过程算法程序描述如下: BiTree SearchBST (BiTree T, KeyType key ){ // 在根指针T所指二叉排序树中递归地查找其关键字等//于key数据元素,若查找成功,则指针p指向该数据//元素结点,否则为NULL if (!T) || EQ(key, T-data.key) { return T; } // 查找结束 else if ( LT(key, T-data.key) ) return(SearchBST (T-lchild, key )); // 在左子树中继续查找 else return( SearchBST (T-rchild, key)); // 在右子树中继续查找 } // SearchBST 4、二叉排序树插入 根据动态查找表的定义,“插入”操作在查找不成功时才进行; 插入原则:若二叉排序树为空,则插入结点应为新的根结点;否则,继续在其左、右子树上查找,直至某个结点的左子树或右子树为空为止,则插入结点应为该结点的左孩子或右孩子 二叉排序树生成:从空树出发,经过一系列的查找、插入操作之后,可生成一棵二叉排序树 插入算法 5、二叉排序树的删除 要删除二叉排序树中的p结点,分三种情况: p为叶子结点,只需修改p双亲f的指针 f-lchild=NULL f-rchild=NULL p只有左子树或右子树 p只有左子树,用p的左孩子代替 p只有右子树,用p的右孩子代替 p左、右子树均非空 以其前驱替代之,然后再删除该前驱结点 void Delete_BST (BiTree T, KeyType key ) { // 若二叉查找树T中存在关键字等于key的数//据

文档评论(0)

skewguj + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档