- 1、本文档共31页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
[工学]《数据结构》第9章:查找
第9章 查 找 查找的基本概念 常见静态查找表及基本查找方法 常见的动态查找表及基本查找方法 哈希表的定义和查找 基 本 概 念 ——关键字 基 本 概 念——查找表 基 本 概 念——查找 基 本 概 念——平均查找长度 顺序表的查找 有序表的查找 二叉排序树 二叉排序树(binary sort tree)或者是一棵空树,或者是具有下列性质的二叉树: (1) 若左子树不空,则左子树上所有结点的值均小于根结点的值; (2) 若右子树不空,则右子树上所有结点值均大于根结点值; (3) 左右子树也都是二叉排序树。 二叉排序树的查找过程 二叉排序树的插入操作和构造一棵二叉排序树 例9.3 记录的关键字为:33,50,42,18,39,45,9。则构造二叉排序树的过程如图9.4所示。 对以上的二叉排序树进行中序遍历后会发现,其中序遍历序列是有序的,这也是二叉排序树的基本特性。 二叉排序树的删除 平衡二叉树的调整 左单旋转(RR型) 右单旋转(LL型) 先左后右双向旋转(LR型) 先右后左双向旋转(RL型) 2.B-树的插入 什么是哈希表 在实际构造这样的查找表的过程中,若存在关键字K,存在确定的对应函数关系f,使得f(K)作为K的存储位置,则此时称函数f为哈希函数,或称为杂凑函数。哈希取自英文HASH,原意为杂凑、胡乱的意思,指的是哈希函数的选择不按常规。通过哈希函数构造出来的查找表,我们称为哈希表,或称为杂凑表。 哈希函数的构造方法 1.直接定址法 直接定址法就是直接取关键字或关键字的某个线性函数作为哈希函数。设关键字集合为{20,30,50,60,80,90},选取哈希函数为f(key)=key/10,则生成的哈希表 如下: 2.数字分析法 3.除留余数法 4.平方取中法 5.折叠法 6.随机法 处理冲突的方法 开放地址法 拉链法 双哈希函数探测法 建立一个公共溢出区 * * 王钢 主编 清华大学出版社 关键字是数据元素(或记录)中某个数据项的值,用它可以标识(识别)一个数据元素(或记录)。惟一的标识一个数据元素(或记录)的关键字称其为主关键字;反之,不能惟一确定一个数据元素(记录)的关键字称为次关键字。 查找表是一种非常灵活的数据结构,是由同一类型的数据元素构成的集合。集合中元素之间的关系是只具有在同一个集合的松散关系。 查找是根据给定的某个值,在查找表中确定一个其关键字等于给定值的数据元素。若表中存在这样的一个记录,则称查找成功,否则称为查找不成功。 由于查找运算的主要操作是关键字的比较,所以为确定数据元素(记录)在查找表中的位置,需要给定值进行比较的关键字个数的期望值称为查找算法在查找成功时的平均查找长度。 [算法9.1] 顺序查找算法 int S_Search(S_T *t , KeyType kx) { // 在表t中查找关键字为kx的数据元素,若找到返回该元素在数组中的下标,否则返回0 int i; t-data[0].key=kx; //存放检测,这样在从后向前查找失败时,不必判断是否检测完。 for (i=t-length;t-data[i].key!=kx ; i--) ; //从尾端向前查找 return i ; //若返回为0,则表示查找不成功,否则,返回即为记录的序号。 } [算法9.2] 折半查找的算法 int Binary_search(S_T *t , keytype kx) { // 在表t中查找关键字为kx的数据元素,若找到返回该元素在表中的位置,否则,返回0 int low , high , mid; int n=0; low=1,high=t-length; // 设置初始区间 while (low=high) // 表空测试 { // 表非空,进行比较测试 mid=(low+high)/2; // 获取中点位置 if (t-data[mid].keykx) high=mid-1; // 调整到左半区 else if(t-data[mid].key kx) low=mid+1; //
文档评论(0)