数据结构 第七章 查找.ppt

  1. 1、本文档共45页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
动态查找 表结构本身在查找过程中动态生成 给定值key,若表中存在其关键字等于key的记录,则查找成功返回,否则插入关键字等于key的记录 二叉排序树 或者是一棵空树,或者是一棵具有如下特性的非空二叉树: 若它的左子树非空,则左子树上所有结点的关键字均小于根结点的关键字 若它的右子树非空,则右子树上所有结点的关键字均大于根结点的关键字 左,右子树本身又各是一棵二叉排序树 二叉排序树 如下图所示的二叉树是一棵二叉排序树 10 6 12 3 8 20 9 15 25 二叉排序树的基本运算 查找结点 插入结点 创建二叉排序树 输出二叉排序树 删除结点 查找结点 采用不回溯的方法 若k等于当前结点的关键字,则返回 若k小于当前结点的关键字,则在左子树中查找 若k大于当前结点的关键字,则在右子树中查找 10 6 12 3 8 20 9 15 25 bt bt1 bt2 bt3 查找关键字为9的结点 插入结点 用f指回其双亲结点,若p为NULL,表示插入关键字为k的结点为*f的左或右孩子结点 创建关键字为k的结点*p,再插入*p结点 10 6 12 3 8 20 9 15 25 bt bt1 bt2 bt3 插入关键字为7的结点 创建二叉排序树 BSTNode *BSTSearch(BSTNode *bt , KeyType str[], int n) { } bt = NULL ; int i = 0 ; while( i n ) { } BSTInsert( bt , str[i] ) ; i++; 创建二叉排序树 关键字序列为{10,6,12,8,3,20,9,25,15} 10 6 12 3 8 20 9 15 25 删除结点 在二叉排序树bt中删除关键字为k的结点 首先在二叉排序树中查找关键字为k的结点p,用f指向其双亲结点 若*p结点无左子树,则用*p结点的右孩子替换它 若*p结点无右子树,则用*p结点的左孩子替换它 若*p结点既有左子树又有右子树,则可以用*p结点的左子树的最右下结点替换它,也可以用*p结点的右子树的最左下结点替换它,这里采用前者 10 6 12 3 8 20 9 15 25 9 6 12 3 8 20 15 25 删除后的二叉排序树 二叉排序树的插入和删除操作,其平均执行时间均为O(log2n) 删除结点 删除关键字为10的结点 哈希表 在元素的存储位置和其关键字之间建立某种直接关系 哈希表通过对元素的关键字值进行某种运算,直接求出元素的地址,而不需要反复比较。又叫散列法 哈希表 哈希函数 利用函数H将数据集中的元素映射到表A中, H(ki)便是ki在表中的存储位置 冲突现象 保证对于任意不同的ki和kj,有 。若 ,而H(ki)=H(kj)的现象称为冲突现象 哈希表的构造方法 直接地址法 H(ki) = a ki + b ( a,b是常量) 数学分析法 假设有一组关键字,每个关键字由n为数字组成,如k1k2…kn。数字分析法是从中提取数字分布比较均匀的若干位作为哈希地址 哈希表的构造方法 除留余数法 用关键字ki除以一个合适的,不大于哈希表长m的正整数p所得余数作为哈希地址的方法 H(ki) = ki MOD p 实践证明,当p取小于哈希表长m的某个素数时,产生的哈希函数较好 平方取中法 折叠法 第一章 概 论 * 第七章 查找 Review 单源最短路径 Dist和path数组 图的遍历 广度优先搜索 宽度优先搜索 查找 查找表 由同一类型的数据元素构成的集合 关键字 数据元素中某个数据项的值,可以标示一个数据元素 查找 根据给定的某个值,在查找表中确定一个其关键字等于给定值的记录 查找方法 如何查找? 取决于表中数据元素依据何种关系组织在一起 动态查找 静态查找 顺序查找 最简单的查找方法 从线性表的一端开始,顺序扫描线性表,依次将扫描到的结点关键字和给定值k相比较 当前扫描到的元素关键字与k相等,则查找成功 若扫描结束后,仍未找到关键字等于k的结点,则查找失败 顺序查找 [例7.1]在关键字序列为{3,9,1,5,8,10,6,7,2,4}的线性表中从前往后查找关键字为6的元素 顺序查找 [例7.1]在关键字序列为{3,9,1,5,8,10,6,7,2,4}的线性表中从前往后查找关键字为6的元素 解:顺序查找过程如下图所示: 开始 3 9 1 5 8 10 6 7 2 4 第一次 3 9 1 5 8 10 6 7 2 4 i=0 第二次 3 9 1 5 8 10 6 7 2 4 i=1 第三次 3

文档评论(0)

153****9595 + 关注
实名认证
内容提供者

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

1亿VIP精品文档

相关文档