该楼层疑似违规已被系统折叠 隐藏此楼查看此楼

第9讲 查找

内容提示:

查找即在某种数据结构中找出满足给定特征的结点,若找到则查找成功,否则,查找失败。

查找的基本问题是采用什么样的存储结构和算法得以提高查找效率。被查找的对象集称为查找表,查找表是一个集合结构,常见的存储方法有顺序存储、树形存储和散列存储,存储方法不同,其查找效率也不同。

本章内容是上述三种存储、查找的实现,及各种查找方法的平均查找长度。

查 找

·基本概念

·线性表查找

·树表查找

·散列表查找

·典型题型

基本概念

查找表

要点:一种以集合为逻辑结构,以查找为核心的数据结构。

静态查找

要点:仅包括建表、查找、读表元三种基本运算;不包括对表做修改操作(如插入和删除)。

动态查找

要点:在查找的同时对表做修改操作(如插入和删除); 它的基本运算包括建表、查找、读表元、插入和删除等基本运算。

平均查找长度

要点:在查找表中进行查找所需要的平均比较次数。

线性表查找

线性表查找是指将查找表视为线性表结构,按线性表结构组织存储,根据表的存储结构和特点,有以下几种查找方法:

顺序查找

二分查找

分块查找

顺序查找

(1) 基本思想:

从表的一端开始,将关键字依次与查找表中数据元素进行比较,在表中找到了要找的元素,则查找成功,返回其位置;否则,查找失败,返回0。

(2) 存储方式:

顺序存储或链式存储。

(3) 顺序存储实现的表示:

typedef struct {

Keytype key; /*关键字域*/

InfoType otherinfo; /*数据元素的其它部分*/

}NodeType;

typedef NodeType SeqList[n+1];

SeqList R;/*查找表的n个元素存在R[1]-R[n] 单元,R[0]留做监视哨*/

(4)查找算法:

① 设置哨兵:将待查数据的关键字K置入R[0]中;

② 循环:从表的高下标端开始顺序比较,R[i].key==K时循环结束;

③ 返回i:i=0时则表明在R[1]---R[n]没有要找的数据,查找失败;否则查找成功,i则为其存储下标。

(5)平均查找长度:

成功时:ASLsucc=(n+1)/2

不成功时:ASLunsucc=n+1

时间复杂度:O(n)

(6)监视哨的作用:

是为了在循环中省去判断防止下标越界的条件,提高查找效率。

二分查找

(1)基本思想:

在关键字已有序的查找表R[1]..R[n]中确定一个中间位置:mid=(1+n)/2,将查找的关键字 K与R[mid]进行比较,

若K=R[mid].key,则查找成功;若K>R[mid].key,则把查找区间确定为R[mid+1]..R[n];若K

依次类推,每查找一次,查找区间就缩小一半,因此称之为二分查找或折半查找。

(2)存储方式:

查找表一定要顺序存储且按关键字有序。链式存储的有序表不能进行二分查找,因为链式存储的情况下,不能通过查找区间中第一个结点的地址和最后一个结点的地址求出中间结点的地址来。

(3)存储实现的表示:

与顺序查找中的顺序存储的实现相同。

(4)查找性能:

成功时平均查找长度:ASLsucc=log2(n+1)-1

不成功时的比较次数是判定树的深度,即为é log2(n+1)ù 。

平均查找长度:O(log2n)

(5)判定树:

根据二分查找的基本思想,把查找区间中一次查找成功的结点作为树的根结点,两次查找成功的结点作为根的左、右结点,… ,依次类推,这棵树就是判定树。

通过一棵判定树,可以直观的看到查找第i个结点所比较的元素及其次数。

判定树的形状与查找表中的元素的个数n有关,与数据元素的值无关。

求给定n个元素的判定树见典型题解析。

分块查找

(1) 基本思想:

对关键字已按块有序的查找表每块建立一个索引项,将这些索引项顺序存储起来组成索引表。

查找分两部分进行,首先从索引表中确定查找项所属的块,再从指定的块内进行查找。

因为查找表按块有序,故索引表是一个有序表,在索引表中查找时可以按顺序查找也可以按二分查找,而因为块内无序,块内查找只能用顺序查找。

search语句的用法c语言,各位高手,search怎么用啊?我是新手,在这里多谢啦!!!...相关推荐

  1. search语句的用法c语言,C++ search()函数用法完全攻略

    通过<C++ find_end()函数>一节的讲解我们知道,find_end() 函数用于在序列 A 中查找序列 B 最后一次出现的位置.那么,如果想知道序列 B 在序列 A 中第一次出现 ...

  2. python语言if语句-Python入门教程之if语句的用法

    这篇文章主要介绍了Python入门教程之if语句的用法,是Python入门的基础知识,需要的朋友可以参考下 OK分享完毕!需要Python资料的可以加QQ群:832339352 进群免费领取下面资料! ...

  3. c语言goto语句用法_C语言的9种控制结构

    点击蓝字关注我哦 C语言语句 goto语句:无条件转向; if语句:判断语句;while循环语句; do-while语句:先执行循环体,然后判断循环条件是否成立. 之后继续循环;for语句:循环,可替 ...

  4. 51单片机c语言 if 语句,单片机if语句的用法

    单片机if语句格式 sbit P2^0=A1; sbit P1^0=A2; sbit 语句等号后边应该是地址. sbit P2^0=A1:能通过编译码?本人试一下:test.C(6): error C ...

  5. c语言switch case缩进,C语言中的switchnbsp;casenbsp;语句的用法详解

    本文就几个实例来说明Switch case 语句的用法. 说是C语言中的Switch case,其实和html+javascript中的Switch case语法是基本一样的哦. 问题: 有这么一个C ...

  6. c语言goto语句标号作用,goto语句怎么用(c语言goto用法)

    goto语句怎么用(c语言goto用法) 2020-07-28 02:03:29 共10个回答 1.C语言中goto又叫无条件转移语句,可以让程序直接跳转到任意标记的位置.用法就是"goto ...

  7. c语言while将字符循环,C语言 while语句的用法详解

    在C语言中,共有三大常用的程序结构: 顺序结构:代码从前往后执行,没有任何"拐弯抹角": 选择结构:也叫分支结构,重点要掌握 if else.switch 以及条件运算符: 循环结 ...

  8. c语言无法跳出while语句,c语言while语句的用法 该循环永远不会结束

    导读:说到语句,我们很多人都知道,有朋友问c语言中while的用法,另外,还有朋友想问c语言的while循环语句,这到底怎么回事呢?事实上c语言while的限制呢,今天小编整理了c语言while语句的 ...

  9. C语言for循环语句的用法及易错点

    C语言for循环语句的用法及易错点 文章目录 C语言for循环语句的用法及易错点 引言 基本语法 代码规范性问题 易错点 作用域问题 完成遍历后i的值 for循环里多个条件 for循环里多个初始化变量 ...

最新文章

  1. linux里根目录下的/bin,usr里的/usr/bin还有local里的/usr/local/bin有什么区别?
  2. TCP协议——三次握手与四次关闭
  3. 关于Java里如何跳出一个多重循环
  4. OpenCV掩码、blending、改变对比度和亮度、随机发生器和绘图
  5. 如何限制浏览器使用_如何使用浪涌电流限制器NTC(一)
  6. bat文件获取当前时间并格式化输出
  7. 计算机专业英语信息系统,信息系统项目管理师英语复习资料:计算机专业英语汇总[5]...
  8. 从 C10K 到 DPDK
  9. 2022聚合工艺复训题库及在线模拟考试
  10. 5.15 vs2019 静态编译_《淫巧系列一》MATLAB编译exe与生成C++库
  11. python flink kafka_Flink Kafka 端到端 Exactly-Once 分析
  12. JS实现鼠标点击出现文字特效
  13. 2018年湖南省高中数学联赛(A)卷试题
  14. Bluetooth core 5.0 ---------- BR/EDR 安全简单配对(BR/EDR secure simple pairing)
  15. 在excel筛选出某一列多个重复值
  16. 使用css形变实现一个立方体
  17. Java学习第十二天----方法参数类型以及返回值类型问题、链式编程、package包、权限修饰符、内部类、成员内部类
  18. HTML 文字的左右来回移动 marquee
  19. C++核心准则T.48:如果你的编译器不支持concepts,使用enable_if模仿它
  20. 使用deepin-Wine在ubuntu下安装QQ,TIM,微信等软件,以及deepin-wine的快捷键设置

热门文章

  1. 回归分析:逻辑斯蒂回归模型,非线性分类任务案例
  2. mac java applet_Mac OS X和多个Java版本
  3. 哈哈日语养成十个习惯让你“疯狂说日语”
  4. 软件测试到底是做什么的?企业为什么招这么多软件测试工程师?
  5. python+vue在线机票查询和售卖系统
  6. 为什么计算机要使用反码/补码
  7. 茅台集团黔茅酒产品介绍
  8. 电脑发热的原因和可用的解决方法:
  9. c语言ccf认证考试题库,2016ccf认证考试试题
  10. 快速排序(简单易懂的代码)