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

相关推荐
Morwit11 分钟前
【力扣hot100】 1. 两数之和
数据结构·c++·算法·leetcode·职场和发展
田梓燊3 小时前
2026/4/11 leetcode 3741
数据结构·算法·leetcode
葳_人生_蕤3 小时前
hot100——栈和队列
数据结构
Meme Buoy6 小时前
18.补充数学1:生成树-最短路径-最大流量-线性规划
数据结构·算法
汀、人工智能6 小时前
[特殊字符] 第89课:岛屿数量
数据结构·算法·数据库架构·图论·bfs·岛屿数量
九英里路6 小时前
cpp容器——string模拟实现
java·前端·数据结构·c++·算法·容器·字符串
2401_892070986 小时前
顺序栈(动态数组实现) 超详细解析(C++ 语言 + 可直接运行)
数据结构·c++·顺序栈
漫霂7 小时前
二叉树的翻转
java·数据结构·算法
3秒一个大7 小时前
深入理解 JS 中的栈与堆:从内存模型到数据结构,再谈内存泄漏
前端·javascript·数据结构
旖-旎7 小时前
哈希表(存在重复元素)(3)
数据结构·c++·学习·算法·leetcode·散列表