09第9章 查找.pptVIP

  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文档。上传文档
查看更多
第9章 查找 基本概念 线性表的查找 树表的查找 哈希表的查找 各种查找方法的比较 基本概念 查找表:由同一类型的数据元素(或记录)构成的集合。 对查找表进行的操作有以下四种: 查询某个特定的数据元素是否在查找表中。 检索某个特定的数据元素的各种属性。 在查找表中插入一个数据元素。 从查找表中删除某个数据元素。 静态查找表:对查找表只作前两种操作 。 动态查找表:在查找过程中同时插入查找表中不存在的数据元素,或者从查找表中删除已存在的某个数据元素。 关键字:标志数据元素(或记录)中某个数据项的值,用它可以标识一个数据元素 。 查找:根据给定的某个值,在查找表中确定是否存在一个数据元素其关键字等于给定值的记录或数据元素 。 平均查找长度ASL为: 线性表的查找 顺序查找 折半查找 分块查找 顺序查找 基本思想:从表的一端开始,顺序扫描线性表,依次用待查找的关键字值与线性表里各结点的关键字值逐个比较,若在表中找到了某个记录的关键字与待查找的关键字值相等,表明查找成功;如果找遍所有结点也没有找到与待查找的关键字值相等,则表明查找失败 。 顺序查找的平均查找长度: 折半查找 基本思想: 首先用要查找的关键字值与中间位置结点的关键字值相比较;比较结果如果相等,则查找完成;若不相等,再根据要查找的关键字值与该中间结点关键码值的大小来确定下一步查找在哪个子表中进行:如果待查关键字大于中间结点的关键字值,则应查找中间结点以后的子表,否则,查找中间结点以前的子表。 实例:已知如下11个数据元素的有序表: (5,14,19,22,37,56,64,75,80,89,92) 现要查找关键字为22的数据元素。 折半查找的平均查找长度 : 折半查找判定树 :折半查找过程可用二叉树来形象的描述,把当前查找区间的中间位置上的结点作为根,左子表和右子表中的结点分别作为根的左子树和右子树,由此得到的二叉树,称为描述折半查找的判定树。 实例: 分块查找 基本思想:把线性表分成若干块,在每一块中结点的存放是任意的,块与块之间必须排序;建立一个索引表,存放每块中最大的关键字值;查找时首先用要查找的关键字值在索引表中查找,确定应在哪一块中,然后再到相应的块中顺序查找。 实例: 算法分析: 平均查找长度ASL: 以二分查找来确定块,分块查找成功时的平均查找长度ASLblk=ASLbn+ASLsq≈lg(b+1)-1+(s+1)/2≈lg(n/s+1)+s/2。 以顺序查找确定块,分块查找成功时的平均查找长度ASL‘blk=(b+1)/2+(s+1)/2=(s2+2s+n)/(2s)。 块的大小:根据表的特征进行分块。 结点的存储结构:各块可放在不同的向量中,也可将每一块存放在一个单链表中。 树表的查找 二叉查找树 平衡二叉树 B-树 二叉查找树 概念:二叉树的每个结点对应于一个关键字,整个二叉树各结点对应的关键字组成一个关键字集合,并且此关键字集合中的各个关键字在二叉树中是按一定顺序排列的,称此二叉树为二叉查找树。 性质:二叉查找树或者是一棵空树,或者是具有如下性质的二叉树: 若它的左子树非空,则左子树上所有结点的值均小于根结点的值。 若它的右子树非空,则右子树上所有结点的值均大于根结点的值。 左子树和右子树又均是一棵二叉查找树。 二叉链表的定义算法描述 : typedef struct Bitnode { int key; struct Bitnode *lchild,*rchild; } *Bitree; /*二叉链表的定义*/ 实例: 生成二叉排序树的算法: BSTree CreateBST(void) { //输入一个结点序列,建立一棵二叉排序树,将根结点指针返回 BSTree T=NULL; //初始时T为空树 KeyType key; scanf(%d,key); //读人一个关键字 while(key){ //假设key=0是输人结束标志 InsertBST(T,key); //将key插入二叉排序树T scanf(%d,key);//读人下一关键字 } return T; //返回建立的二叉排序树的根指针 } //BSTree 二叉查找树的查找过程: 当二叉查找树为空时,查找失败。 如果二叉查找树根结点记录的关键字等于key,则查找成功。 如果二叉查找树根结点记录的关键字小于 key,则用同样的方法继续在根结点的右子树上查找。 如果二叉查找树根结点记录的关键字大于 key,则用同样的方法继续在根结点的左子树上查找。 二叉查找树的插入过程的描述: 若二叉查找树为空,则将待插入

文档评论(0)

海川电子书城 + 关注
实名认证
文档贡献者

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

1亿VIP精品文档

相关文档