数据结构(5)

文章目录

  • [1. 查找](#1. 查找)
  • [2. 顺序查找](#2. 顺序查找)
  • [3. 折半查找](#3. 折半查找)
  • [4. 分块查找](#4. 分块查找)
  • [5. 二叉排序树](#5. 二叉排序树)

1. 查找

 1. 查找:在数据集合中寻找满足某种条件的数据元素的过程称为查找。

 2. 查找表:用于查找的数据集合称为查找表。 (1) 静态查找表:一个查找表的操作只涉及查找操作,无须动态地修改查找表。 (2) 需要动态地插入或删除的查找表。

 3. 关键字:数据元素中唯一标识该元素的某个数据项的值。

 使用基于关键字的查找,查找结果应该是唯一的。例如,在由一个学生元素构成的数据集合中,学生元素中 "学号" 这一数据项的值唯一标识一名学生。

2. 顺序查找

 1. 顺序查找又称线性查找,它对顺序表和链表都是适用的。对于顺序表,可通过数组下标递增来顺序扫描每个元素;对于链表,可通过指针 next 来依次扫描每个元素。

 2. 顺序查找通常分为对一般的无序线性表的顺序查找和对按关键字有序的线性表的顺序查找。

  • 一般的线性表的顺序查找:(1) 从线性表的一端开始,逐个检查关键字是否满足给定的条件。(2) 若查找到某个元素的关键字满足给定条件,则查找成功,返回该元素在线性表中的位置。(3) 若已经查找到表的另一端,但还没有查找到符合给定条件的元素,则返回查找失败的信息。
  • 有序线性表的顺序查找:若在查找之前就已知表是关键字有序的,则查找失败时可以不用再比较到表的另一端就能返回查找失败的信息,从而降低查找失败的平均查找长度。

3. 折半查找

 1. 折半查找又称二分查找,它仅适用于有序的顺序表。

 2. 折半查找的基本思想:(1) 首先将给定Key与表中的中间位置的元素比较,若相等,则查找成功,返回该元素的存储位置。(2) 若不等,则所需查找的元素只能在中间元素以外的前半部分或后半部分,然后在缩小的范围内继续进行同样的查找。(3) 重复上述步骤,直到找到为止。

 注:当折半查找算法选取中间结点时,既可以采用向下取整,又可以采用向上取整。但每次查找的取整方式必须相同。

4. 分块查找

 1. 分块查找又称索引顺序查找,它吸取了顺序查找和折半查找各自的优点,既有动态结构,又适于快速查找。

 2. 分块查找的基本思想:将查找表分为若干子块。块内的元素可以无序,但块间的元素是有序的,即第一块中的最大关键字小于第二个块中的所有记录的关键字,第二块中的最大关键字小于第三个块中的所有记录的关键字,依次类推。

5. 二叉排序树

 1. 二叉排序树的特性:(1) 若左子树非空,则左子树上所有结点的值均小于根结点的值。(2) 若右子树非空,则右子树上所有结点的值均大于根结点的值。(3) 左、右子树也分别是一棵二叉排序树。

 2. 二叉排序树的查找是从根结点开始,沿某个分支逐层向下比较的过程。若二叉排序树非空,先将给定值与根结点的关键字比较,若相等,则查找成功;若不等,小于根结点的关键字则在左子树查找,否则在根结点的右子树上查找。

相关推荐
淡海水11 小时前
08-03-不可变-ImmutableDictionary-TKey-TValue-与ImmutableHashSet-T-持久化哈希树
数据结构·算法·c#·哈希算法·dictionary·immutable
Nil20814 小时前
leetcode 78子集
数据结构·算法·leetcode
喜欢吃燃面15 小时前
深入 C++ STL:从 unordered_set与unordered_map到底层哈希表的原理与实现
数据结构·c++·散列表
en.en..15 小时前
Linux fork() 工作原理
数据结构·算法
不会就选b17 小时前
数据结构之树&&二叉树(二)
数据结构·算法
小刘在重生~19 小时前
Java 集合|Collection、List、ArrayList、LinkedList、泛型、Collections 工具类
java·数据结构·list
我不会起名字32219 小时前
一天一道算法题(29):单调栈
java·数据结构·python·算法·leetcode·golang·单调栈
苦瓜小生19 小时前
【前端】【力扣与手撕】十天带你刷完前端算法与手撕,全是最简单好记的最优解法!day4
前端·数据结构·算法·leetcode·面试
少司府21 小时前
C++进阶:智能指针
开发语言·数据结构·c++·b树·算法·c·智能指针
LuminousCPP1 天前
数据结构-排序(一):基础排序算法横向对比|冒泡、插入、希尔、堆与双向选择,详解二分 / Knuth 增量
c语言·数据结构·笔记·算法·排序算法