数据结构C语言版吴子东第7章查找课件教学.pptVIP

数据结构C语言版吴子东第7章查找课件教学.ppt

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
数据结构C语言版吴子东第7章查找课件教学.ppt

7.1 查找的基本概念 7.2 静态查找表 7.2.1 静态查找表的结构 7.2.2 顺序查找 7.2.3 有序表的折半查找 7.2.4 分块查找 作业 7.2.1 静态查找表的结构 typedef struct { elemtype *elem; /*数组基址*/ int length; /*表长度*/ }s_tbl; 7.2.2 顺序查找 查找方法为:从表的一端开始,向另一端逐个按给定值kx与关键字进行比较,若找到,查找成功,并给出数据元素在表中的位置;若整个表检测完,仍未找到与kx相同的关键字,则查找失败,给出失败信息。 7.2.3 有序表的折半查找(二分查找) 折半查找的思路: 在有序表中,取中间元素作为比较对象,若给定值与中间元素的关键字相等,则查找成功;若给定值小于中间元素的关键字,则在中间元素的左半区继续查找;若给定值大于中间元素的关键字,则在中间元素的右半区继续查找。不断重复上述查找过程,直到查找成功,或所查找的区域无数据元素,则查找失败。 7.2.3 有序表的折半查找(二分查找) 算法执行示意图。 算法执行示意图。 性能分析:从折半查找过程看,以表的中点为比较对象,并以中点将表分割为两个子表,对定位到的子表继续这种操作。所以对表中每个数据元素的查找过程,可用二叉树来描述,称这个描述查找过程的二叉树为判定树。 7.2.4 分块查找 分块示例 作业 1.静态查找有几种方法。 2.那种静态查找方法的过程可以形成一棵二叉判定树。 3.做教材习题中的以下题目。 单项选择题:(2),(3) 填空题:(1),(2), (5), (6), (7) 应用题:(4) 7.3 动态查找表 7.3.1 二叉排序树的查找 7.3.2 B-树的查找 作业 7.3.1 二叉排序树的查找 ① 若左子树不空,则左子树上所有结点的值均小于根结点的值;若右子树不空,则右子树上所有结点的值均大于(若允许存在有相同值的关键字,则大于等于)根结点的值。 2.构造二叉排序 以二叉链表作为二叉排序树的存储结构,则结点描述如下: 二叉排序树查找的算法如下: void insertnode (nodetype **t, elemtype x) { /*在二叉排序树*t上插入关键字为x的结点*/ nodetype *p=*t,*q,*s; if(!searchelem(*t,p,q,x)); /*在*t为根的子树上查找*/ { s=(nodetype *)malloc(sizeof(nodetype)); s-elem=x;s-lc=NULL;s-rc=NULL; if(!p) t=s; /*向空树中插入时*/ else{ if(xp-elem)p-rc=s; /*插入结点为p的右孩子*/ else p-lc=s; /*插入结点为p的左孩子*/ } } } 5.二叉排序树的删除操作 从二叉排序树中删除一个结点之后,使其仍能保持二叉排序树的特性即可。 设待删结点为P,其双亲结点为F,以下分三种情况进行讨论。 int deletenode(nodetype **t,keytype key) { nodetype *p=*t,*q,*s,**f; int flag=0; if(searchelem(*t,p,q,key)); { flag=1; /*查找成功,置删除成功标志*/ if(p==q) f=(*t); /*待删结点为根结点时*/ else { f=(p-lc); /*待删结点非根结点时*/ if(keyp-elem)f=(p-rc);} /*f指向待删结点的父结点的相应指针域*/ if(!q-rc)*f=q-lc; /*若待删结点无右子树,以左子树替换待删结点*/ else { if(!q-lc)*f=q-rc; /*若待删结点无左子树,以右子树替换待删结点*/ else { p=q-rc;s=p; /*既有左子树又有右子树*/ while(p-lc){s=p;

您可能关注的文档

文档评论(0)

带头大哥 + 关注
实名认证
文档贡献者

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

1亿VIP精品文档

相关文档