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

相关推荐
用户00993831430137 分钟前
代码随想录算法训练营第十三天 | 二叉树part01
数据结构·算法
shinelord明41 分钟前
【再谈设计模式】享元模式~对象共享的优化妙手
开发语言·数据结构·算法·设计模式·软件工程
薄荷故人_1 小时前
从零开始的C++之旅——红黑树及其实现
数据结构·c++
努力学习编程的伍大侠1 小时前
基础排序算法
数据结构·c++·算法
XiaoLeisj2 小时前
【递归,搜索与回溯算法 & 综合练习】深入理解暴搜决策树:递归,搜索与回溯算法综合小专题(二)
数据结构·算法·leetcode·决策树·深度优先·剪枝
Jackey_Song_Odd3 小时前
C语言 单向链表反转问题
c语言·数据结构·算法·链表
乐之者v3 小时前
leetCode43.字符串相乘
java·数据结构·算法
A懿轩A4 小时前
C/C++ 数据结构与算法【数组】 数组详细解析【日常学习,考研必备】带图+详细代码
c语言·数据结构·c++·学习·考研·算法·数组
️南城丶北离5 小时前
[数据结构]图——C++描述
数据结构··最小生成树·最短路径·aov网络·aoe网络
✿ ༺ ོIT技术༻5 小时前
C++11:新特性&右值引用&移动语义
linux·数据结构·c++