数据结构查找PPT课件
查找 数据结构讲义
![查找 数据结构讲义](https://img.taocdn.com/s3/m/d4e446d733d4b14e85246874.png)
ASL blk
s1 s ASL bn ASL sq log 2 (h 1) 1 log 2 (n / s 1) 2 2
若以顺序查找确定块,则分块查找成功时的平 均查找长度为:
ASL ASL bn ASL sq blk
b 1 s 1 s 2s n 2 2 2s
low=0 high=3 第2次比较: 2 4 7 9 10 14 18
mid=(0+3)/2=1 26 32 40
low=2
第3次比较: 2 4 7
high=3
9 10 14 18 26
mid=(2+3)/2=2
32 40
R[2].key=7 查找成功,返回序号2
其算法如下(在有序表R[0..n-1]中进行二分查找, 成功时返回记录的位置,失败时返回-1):
二分查找过程可用二叉树来描述,我们
把当前查找区间的中间位置上的记录作为根,
左子表和右子表中的记录分别作为根的左子
树和右子树,由此得到的二叉树,称为描述
二分查找的判定树或比较树。
<
5 =
>
< 0 = > 1 < = >
2 =
> 3 < = >
2~3
8 < =
6 < = >
5~6
> 9 < = > 10 < = >
采用二分查找索引表的分块查找算法如下(索引表I的长度 为m):
int IdxSearch(IDX I, int m, SeqList R, int n, KeyType k)
{
int low=0,high=m-1,mid,i;
(2024年)《数据结构》全套课件
![(2024年)《数据结构》全套课件](https://img.taocdn.com/s3/m/1ad9224c02d8ce2f0066f5335a8102d276a261cf.png)
30
树形数据结构的查找算法
二叉排序树的查找
从根节点开始,若查找值小于当前节点 值,则在左子树中查找;若大于当前节 点值,则在右子树中查找。
VS
平衡二叉树的查找
在保持二叉排序树特性的基础上,通过旋 转操作使树保持平衡,提高查找效率。
2024/3/26
31
散列表的查找算法
散列函数的设计
将关键字映射为散列表中位置的函数。
过指针来表示。
链式存储的特点
逻辑上相邻的元素在物理位置上 不一定相邻;每个元素都包含数
据域和指针域。
链式存储的优缺点
优点是插入和删除操作不需要移 动元素,只需修改指针;缺点是
存储密度小、空间利用率低。
2024/3/26
11
线性表的基本操作与实现
插入元素
在线性表的指定位 置插入一个元素。
查找元素
在线性表中查找指 定元素并返回其位 置。
自然语言处理的应用
在自然语言处理中,需要处理大量的文本数据,数据结构中的字符 串、链表、树等可以很好地支持文本的处理和分析。
41
数据结构在计算机网络中的应用
2024/3/26
路由算法的实现
计算机网络中的路由算法需要大量的数据结构支持,如最短路径 树、距离向量等。
网络流量的控制
在计算机网络中,需要对网络流量进行控制和管理,数据结构中的 队列、缓冲区等可以很好地支持流量的控制。
37
06
数据结构的应用与拓展
2024/3/26
38
数据结构在算法设计中的应用
01
作为算法设计的基 础
数据结构为算法提供了基本操作 和存储方式,是算法实现的重要 基础。
02
提高算法效率
大学数据结构课件--第9章 查找
![大学数据结构课件--第9章 查找](https://img.taocdn.com/s3/m/4cb883fdb4daa58da1114a6b.png)
二叉排序树既有类似于折半查找的特性,又采用了链表存储,它是动态 查找表的一种适宜表示。
注:若数据元素的输入顺序不同,则得到的二叉排序树形态 也不同!
17
二、二叉树的插入和删除操作
1、二叉排序树的插入和查找操作
例:输入待查找的关键字序列=(45,24,53,12,90)
折半查找举例:
已知如下11个元素的有序表:
(05 13 19 21 37 56 64 75 80 88 92), 请查找关键字为21和85的数据元素。
Low指向待查元 素所在区间的下 界
mid指向待查元素所在 high指向待查元素所
区间的中间位置
在区间的上界
8
9.1.2 折半查找(又称二分查找或对分查找)
balance。这样,可以得到AVL树的其它性质:
❖ 任一结点的平衡因子只能取:-1、0 或 1;如果树中任 意一个结点的平衡因子的绝对值大于1,则这棵二叉树 就失去平衡,不再是AVL树;
24
三、平衡二叉树
例:判断下列二叉树是否AVL树?
-1
1
-1
0
0
1
0
(a) 平衡树
2
-1
0
0
1
0
(b) 不是平衡树
(1)p为叶子结点,只需修改p双亲f的指针f->lchild=NULL或 f->rchild=NULL
(2)P只有左子树或右子树 ❖ P只有左子树,用P的左孩子代替P ❖ P只有右子树,用P的右孩子代替P
(3)P左、右子树均非空 (P左子树的根C的右子树分支找到S,S的右子树为空) ❖ P的左子树成为双亲f的左子树,P的右子树成为S的右子树 ❖ S的左子树成为S的双亲Q的右子树,用S取代p; 若C无右子树,用C取代p
数据结构ppt课件
![数据结构ppt课件](https://img.taocdn.com/s3/m/a5d700c7a1116c175f0e7cd184254b35eefd1a06.png)
数据结构的定义数据结构是计算机中存储、组织数据的方式,它定义了数据元素之间的逻辑关系以及如何在计算机中表示这些关系。
提高算法效率合适的数据结构可以显著提高算法的执行效率,降低时间复杂度和空间复杂度。
简化程序设计数据结构为程序设计提供了统一的抽象层,使得程序员可以更加专注于问题本身,而不是底层的数据表示和访问细节。
便于数据管理和维护良好的数据结构设计可以使得数据的管理和维护变得更加方便和高效。
数据结构的定义与重要性线性数据结构中的元素之间存在一对一的关系,如数组、链表、栈和队列等。
线性数据结构非线性数据结构中的元素之间存在一对多或多对多的关系,如树、图等。
非线性数据结构静态数据结构在程序运行期间不会发生改变,如数组、静态链表等。
静态数据结构动态数据结构在程序运行期间可以动态地添加或删除元素,如链表、动态数组等。
动态数据结构数据结构的分类01020304在计算机科学中,数据结构是算法设计和分析的基础,广泛应用于操作系统、编译原理、数据库等领域。
计算机科学在软件工程中,数据结构是软件设计和开发的重要组成部分,用于实现各种软件功能和性能优化。
软件工程在人工智能中,数据结构用于表示和处理各种复杂的数据和知识,如神经网络、决策树等。
人工智能在大数据处理中,数据结构用于高效地存储、管理和分析海量数据,如分布式文件系统、NoSQL 数据库等。
大数据处理数据结构的应用领域0102线性表是具有n个数据元素的有限序列创建、销毁、清空、判空、求长度、获取元素、修改元素、插入元素、删除元素等线性表的定义线性表的基本操作线性表的定义与基本操作03用一段地址连续的存储单元依次存储线性表的数据元素顺序存储结构的定义可以随机存取,即可以直接通过下标访问任意元素;存储密度高,每个节点只存储数据元素顺序存储结构的优点插入和删除操作需要移动大量元素;空间利用率不高,需要提前分配存储空间顺序存储结构的缺点链式存储结构的定义01用一组任意的存储单元存储线性表的数据元素,这组存储单元可以是连续的,也可以是不连续的链式存储结构的优点02插入和删除操作不需要移动大量元素,只需要修改指针;空间利用率高,不需要提前分配存储空间链式存储结构的缺点03不能随机存取,只能通过从头节点开始遍历的方式访问元素;存储密度低,每个节点除了存储数据元素外,还需要存储指向下一个节点的指针0102定义栈(Stack)是一种特殊的线性数据结构,其操作只能在一端(称为栈顶)进行,遵循后进先出(LIFO)的原则。
《数据结构》课件
![《数据结构》课件](https://img.taocdn.com/s3/m/8e904168657d27284b73f242336c1eb91a37330a.png)
第二章 线性表
1
线性表的顺序存储结构
2
线性表的顺序存储结构使用数组来存储元素,
可以快速随机访问元素。
3
线性表的常见操作
4
线性表支持常见的操作,包括插入、删除、 查找等,可以灵活地操作其中的元素。
线性表的定义和实现
线性表是一种数据结构,它包含一组有序的 元素,可以通过数组和链表来实现。
线性表的链式存储结构
线性表的链式存储结构使用链表来存储元素, 支持动态扩展和插入删除操作。
第三章 栈与队列
栈的定义和实现
栈是一种特殊的线性表,只能在一 端进行插入和删除操作,遵循后进 先出的原则。
队列的定义和实现
队列是一种特殊的线性表,只能在 一端进行插入操作,在另一端进行 删除操作,遵循先进先出的原则。
栈和队列的应用场景和操作
哈希表是一种高效的查找数据结构, 通过哈希函数将关键字映射到数组 中,实现快速查找。
排序算法包括冒泡排序、插入排序 和快速排序等,可以根据数据规模 和性能要求选择合适的算法。
结语
数据结构的学习心得 总结
学习数据结构需要掌握基本概念 和常见操作,通过实践和练习加 深理解和熟练度。
下一步学习计划的安 排
在掌握基本数据结构的基础上, 可以进一步学习高级数据结构和 算法,提升编程技能。
相关学习资源推荐
推荐一些经典的数据结构教材和 在线学习资源,如《算法导论》 和LeetCode等。
栈和队列在计算机科学中有许多应 用,如函数调用、表达式求值和作 业调度等。
第四章 树与二叉树
树的定义和性质
树是由节点和边组成的一种非线性数据结构,每个 节点可以有多个子节点。
二叉树的遍历方式
二叉树的遍历方式包括前序遍历、中序遍历和后序 遍历,可以按不同顺序输出节点的值。
数据结构ppt课件完整版
![数据结构ppt课件完整版](https://img.taocdn.com/s3/m/676da7660166f5335a8102d276a20029bd6463af.png)
数据结构分类
根据数据元素之间关系的不同, 数据结构可分为线性结构、树形 结构、图形结构等。
4
数据结构重要性
01
02
03
提高算法效率
合理的数据结构可以大大 提高算法的执行效率,减 少时间和空间复杂度。
33
案例三:最小生成树在通信网络优化中应用
Kruskal算法
基于并查集实现,按照边的权值从小到大依次添加边,直到生成 最小生成树。
Prim算法
从某一顶点开始,每次选择与当前生成树最近的顶点加入,直到 所有顶点都加入生成树。
通信网络优化
最小生成树算法可用于通信网络优化,通过选择最优的通信线路 和节点,降低网络建设和维护成本。
2024/1/28
简化程序设计
数据结构的设计和实现可 以简化程序设计过程,提 高代码的可读性和可维护 性。
解决实际问题
数据结构是解决实际问题 的基础,如排序、查找、 图论等问题都需要依赖于 特定的数据结构。
5
相关术语解析
数据元素
数据元素是数据的基本 单位,通常作为一个整
体进行考虑和处理。
2024/1/28
02
队列的基本操作包括入队(enqueue)、出队( dequeue)、查看队首和队尾元素等。
03
队列的特点
2024/1/28
04
数据从队尾入队,从队首出队。
05
队列中元素的插入和删除操作分别在两端进行,因此也称 为双端操作。
06
队列中没有明显的头尾标记,通常通过计数器或循环数组 等方式实现。
15
栈和队列应用举例
数据结构详解ppt课件
![数据结构详解ppt课件](https://img.taocdn.com/s3/m/de9862a550e79b89680203d8ce2f0066f433647a.png)
“数据结构知识导入全程目标•数据结构的基本概念–逻辑结构–物理结构–运算结构•数据结构的基本实现–堆栈–队列–链表–二叉树知识讲解数据结构的基本概念•数据结构是相互之间存在一种或多种特定关系的数据的集合•数据结构是计算机存储、组织数据的方式•数据结构的选择直接影响计算机程序的运行效率(时间复杂度)和存储效率(空间复杂度)•计算机程序设计=算法+数据结构•数据结构的三个层次–抽象层——逻辑结构–结构层——物理结构–实现层——运算结构识讲解•集合结构(集)–结构中的数据元素除了同属于一个集合外没有其它关系识讲解•线性结构(表)–结构中的数据元素具有一对一的前后关系识讲解•树型结构(树)–结构中的数据元素具有一对多的父子关系知识讲解实现双向线性链表•删除节点识讲解•树形结构的最简模型,每个节点最多有两个子节点•每个子节点有且仅有一个父节点,整棵树只有一个根节点•具有递归的结构特征,用递归的方法处理,可以简化算法•三种遍历序–前序遍历:D-L-R–中序遍历:L-D-R–后序遍历:L-R-D识讲解•二叉树的一般形式–根节点、枝节点和叶节点–父节点和子节点–左子节点和右子节点–左子树和右子树–大小和高度(深度)识讲解•满二叉树–每层节点数均达到最大值–所有枝节点均有左右子树知识讲解二叉树•完全二叉树–除最下层外,各层节点数均达到最大值–最下层的节点都连续集中在左边识讲解•顺序存储–从上到下、从左到右,依次存放–非完全二叉树需用虚节点补成完全二叉树识讲解•链式存储–二叉链表,每个节点包括三个域,一个数据域和两个分别指向其左右子节点的指针域识讲解•链式存储–三叉链表,每个节点包括四个域,一个数据域、两个分别指向其左右子节点的指针域和一个指向其父节点的指针域知识讲解实现有序二叉树•有序二叉树亦称二叉搜索树,若非空树则满足:–若左子树非空,则左子树上所有节点的值均小于等于根节点的值–若右子树非空,则右子树上所有节点的值均大于等于根节点的值–左右子树亦分别为有序二叉树•基于有序二叉树的排序和查找,可获得O(logN)级的平均时间复杂度知识讲解逻辑结构•网状结构(图)–结构中的数据元素具有多对多的交叉映射关系识讲解•顺序结构–结构中的数据元素存放在一段连续的地址空间中识讲解•顺序结构–随机访问方便,空间利用率低,插入删除不方便识讲解•链式结构–结构中的数据元素存放在彼此独立的地址空间中–每个独立的地址空间称为节点–节点除保存数据外,还需要保存相关节点的地址识讲解•链式结构–插入删除方便,空间利用率高,随机访问不方便知识讲解逻辑结构与物理结构的关系•每种逻辑结构采用何种物理结构实现,并没有一定之规,通常根据实现的难易程度,以及在时间和空间复杂度方面的要求,选择最适合的物理结构,亦不排除复合多种物理结构实现一种逻辑结构的可能知识讲解运算结构•创建与销毁–分配资源、建立结构、释放资源•插入与删除–增加、减少数据元素•获取与修改–遍历、迭代、随机访问•排序与查找–算法应用知识讲解数据结构的基本实现•堆栈–基于顺序表的实现–基于链式表的实现•队列–基于顺序表的实现–基于链式表的实现•链表–双向线性链表的实现•二叉树–有序二叉树(二叉搜索树)的实现知识讲解堆栈•后进(压入/push)先出(弹出/pop)识讲解•初始化空间、栈顶指针、判空判满识讲解•动态分配、栈顶指针、注意判空知识讲解队列•先进(压入/push)先出(弹出/pop)识讲解•初始化空间、前弹后压、循环使用、判空判满识讲解•动态分配、前后指针、注意判空知识讲解链表•地址不连续的节点序列,彼此通过指针相互连接•根据不同的结构特征,将链表分为:–单向线性链表–单向循环链表–双向线性链表–双线循环链表–数组链表–链表数组–二维链表识讲解•单向线性链表识讲解•单向循环链表识讲解•双向线性链表识讲解•双向循环链表识讲解•数组链表识讲解•链表数组识讲解•二维链表识讲解•结构模型识讲解•插入节点。
数据结构图结构(动态PPT)课件
![数据结构图结构(动态PPT)课件](https://img.taocdn.com/s3/m/5e817e0a326c1eb91a37f111f18583d048640f6b.png)
结合实际问题
将数据结构图与实际问题相结合,通过分析问题的本质和 规律,选择合适的数据结构和算法进行求解。
创新应用方式
在传统的数据结构图应用基础上,探索新的应用方式和方 法,如基于数据结构图的机器学习模型、数据结构图在社 交网络分析中的应用等。
跨学科融合
将数据结构图与其他学科领域进行融合,如物理学、化学 、生物学等,通过借鉴其他学科的理论和方法,创新数据 结构图的应用场景和解决方案。
包括无向图、有向图、权 重图、邻接矩阵、邻接表 等。
图的遍历方法
深度优先搜索(DFS)和 广度优先搜索(BFS)的 原理和实现。
非线性数据结构图应用案例
树的应用案例
包括二叉搜索树、堆、哈夫曼树等在实际问题中的应用,如排序、优先队列、 编码等。
图的应用案例
包括最短路径问题(Dijkstra算法、Floyd算法)、最小生成树问题(Prim算法 、Kruskal算法)以及网络流问题等在实际问题中的应用,如交通网络规划、电 路设计等。
根据实际需求,选择适合的最小生 成树算法,如Prim算法、Kruskal算
法等。
B
C
D
可视化呈现结果
将算法的运行过程和结果以图形化的方式 呈现出来,方便用户直观地理解和掌握最 小生成树算法的原理和实现过程。
实现算法逻辑
编写代码实现最小生成树算法的逻辑,包 括节点的选择、边的添加和权重的计算等 。
拓展思考:如何创新应用数据结构图解决问题
作用
帮助理解复杂数据结构的组成和 关系,提高数据处理的效率。
常见类型及特点
01
02
03
04
线性数据结构图
元素之间一对一关系,如数组 、链表等。
树形数据结构图
(2024年)数据结构严蔚敏PPT完整版
![(2024年)数据结构严蔚敏PPT完整版](https://img.taocdn.com/s3/m/1a78a29e27fff705cc1755270722192e453658f8.png)
选择排序的基本思想
在未排序序列中找到最小(或最大)元素,存放到排序 序列的起始位置,然后,再从剩余未排序元素中继续寻 找最小(或最大)元素,然后放到已排序序列的末尾。 以此类推,直到所有元素均排序完毕。
2024/3/26
33
交换排序和归并排序
交换排序的基本思想
通过不断地交换相邻的两个元素(如果它们的顺序错 误)来把最小的元素“浮”到数列的一端。具体实现 时,从第一个元素开始,比较相邻的两个元素,如果 前一个比后一个大,则交换它们的位置;每一对相邻 元素做同样的工作,从开始第一对到结尾的最后一对 ;这步做完后,最后的元素会是最大的数;针对所有 的元素重复以上的步骤,除了最后一个;持续每次对 越来越少的元素重复上面的步骤,直到没有任何一对 数字需要比较。
图的基本操作
创建图、添加顶点、添加边、删除顶点、删除边 等
2024/3/26
27
图的存储结构
01
邻接矩阵表示法
用一个二维数组表示图中顶点间的 关系,适用于稠密图
十字链表表示法
用于有向图,可以方便地找到任一 顶点的入边和出边
03
2024/3/26
02
邻接表表示法
用链表表示图中顶点间的关系,适 用于稀疏图
入栈操作将元素添加到栈顶,出栈操作将栈顶元素删 除,取栈顶元素操作返回栈顶元素但不删除,判断栈
是否为空操作检查栈中是否有元素。
2024/3/26
12
栈的表示和实现
栈可以用数组或链表来实现。
用数组实现时,需要预先分配一块连续的内存空间,用一个变量指示栈顶位置。入栈和出栈操作都可以 通过移动栈顶位置来实现。
22
二叉树的定义和基本操作
二叉树的定义
二叉树是一种特殊的树,每个节点最 多有两个子节点,分别称为左子节点 和右子节点。
[课件]数据结构 第九章 查找
![[课件]数据结构 第九章 查找](https://img.taocdn.com/s3/m/d1d7640e52ea551810a687cc.png)
例 初始: 49 38 65 97 76 13 27 48 55 4 取d1=5 49 一趟分组: 38 65 97 76 13 27 48 55 4
一趟排序:13 27 48 55 4 取d2=3 13 二趟分组: 27 48 55 4
49 38 65 97 76 49 38 65 97 76
二趟排序:13 4 48 38 27 49 55 65 97 76 取d3=1 13 三趟分组: 4 48 55 27 49 38 65 97 76
第十章 排序
排序定义——将一个数据元素(或记录)的任意 序列,重新排列成一个按关键字有序的序列叫~ 排序分类
按待排序记录所在位置
内部排序:待排序记录存放在内存 外部排序:排序过程中需对外存进行访问的排序
按排序依据原则
插入排序:直接插入排序,折半插入排序,希尔排序 交换排序:冒泡排序,快速排序 选择排序:简单选择排序,堆排序 归并排序:2-路归并排序 基数排序
4 一趟排序:13 27 48 38 27 49 55 65 97 76 55 4 38 j j j ji ij ij ij i i i
二趟排序: 13 4 48 38 27 49 55 65 97 76 Ch8_3.c
希尔排序特点
子序列的构成不是简单的"逐段分割",而是将相隔某个增 量的记录组成一个子序列 希尔排序可提高排序速度,因为 分组后n值减小,n更小,而T(n)=O(n),所以T(n)从总体 上看是减小了 关键字较小的记录跳跃式前移,在进行最后一趟增量为1 的插入排序时,序列已基本有序 增量序列取法 无除1以外的公因子 最后一个增量值必须为1
2 ( n + 4 )( n 1 ) ( i + 1) = 2
数据查找——二分查找课件高中信息技术浙教版(2019)选修1数据与数据结构(19张PPT)
![数据查找——二分查找课件高中信息技术浙教版(2019)选修1数据与数据结构(19张PPT)](https://img.taocdn.com/s3/m/5cc108d882d049649b6648d7c1c708a1294a0a7f.png)
没找到时,若中点数据偏小: key应在中点右侧
if f==True: print("查找成功!第"+str(b+1)+"个数据")
else: print("没有找到!")
二分查找的程序实现
①存储待查找数据key等 ②i和j定义子数组的边界 ③确定本次查找的数据下标 ④若找到则停止循环,记录位置
key 12
0 1 2 3 4 5 6 7 8 9 10
d 6 12 15 18 22 25 28 35 46 58 60
i
j
m=(i+j)/2
key<m,所以只能在左边于有序表
key 12
0 1 2 3 4 5 6 7 8 9 10
d 6 12 15 18 22 25 28 35 46 58 60
ij
m
第4遍比较: 6 12 15 18 22 25 28 35 46 58 60
j i m
key=12;f=False d=[6,12,15,18,22,25,28,35,46,58,60]
i=0;j=len(d)-1 当存在待查找的子数组时,继续查找
本次查找的数据下标为i,j的中点
判断中点数据是否为key值: 找到记录下标;做找到标记 break
感谢大家聆听
j=m-1 else:
i=m+1 if f==True:
print("查找成功!第"+str(b+1)+"个数据") else:
print("没有找到!")
二分查找的程序实现
2024版《数据结构图》ppt课件
![2024版《数据结构图》ppt课件](https://img.taocdn.com/s3/m/2f68ed2ff4335a8102d276a20029bd64783e62c0.png)
良好的数据结构可以带来更高的运 行或存储效率,是算法设计的基础, 对程序设计的成败起到关键作用。
常见数据结构类型介绍
线性数据结构
如数组、链表、栈、队 列等,数据元素之间存
在一对一的关系。
树形数据结构
如二叉树、多叉树、森 林等,数据元素之间存
在一对多的关系。
图形数据结构
由顶点和边组成,数据 元素之间存在多对多的
队列定义、特点及应用场景
队列的特点 只能在队尾进行插入操作,队头进行删除操作。
队列是一种双端开口的线性结构。
队列定义、特点及应用场景
应用场景 操作系统的任务调度。 缓冲区的实现,如打印机缓冲区。
队列定义、特点及应用场景
广度优先搜索(BFS)。
消息队列和事件驱动模型。
串定义、基本操作及实现方法
最短路径问题 求解图中两个顶点之间的最短路径,即路径上边 的权值之和最小。
3
算法介绍 Prim算法、Kruskal算法、Dijkstra算法、Floyd 算法等。
拓扑排序和关键路径问题探讨
拓扑排序
对有向无环图(DAG)进行排序, 使得对每一条有向边(u,v),均有
u在v之前。
关键路径问题
求解有向无环图中从源点到汇点 的最长路径,即关键路径,它决
遍历二叉树和线索二叉树
遍历二叉树
先序遍历、中序遍历和后序遍历。遍历算 法可以采用递归或非递归方式实现。
VS
线索二叉树
利用二叉链表中的空指针来存放其前驱结 点和后继结点的信息,使得在遍历二叉树 时可以利用这些线索得到前驱和后继结点, 从而方便地遍历二叉树。
树、森林与二叉树转换技巧
树转换为二叉树
加线、去线、层次调整。将树中的每个结点的所有孩子结点用线连接起来,再去掉与原结点相连的线,最后 将整棵树的层次进行调整,使得每个结点的左子树为其第一个孩子,右子树为其兄弟结点。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
}
找到:返回元素在线
(a) 初性态表中的存储位置;
0 1 2 3 4未找5到:返6 回07。 80 10 20 40 80 30 60 25
监视哨
(b) K=80 (return i=4)
012 3 4 567
15.06.2020
90 10 20 40 80 30 60 25
.
10
(c) K=90 (return i=0 )
.
第九章 查找
9.1 静态查找表 9.2 动态查找表 9.3 哈希表
15.06.2020
2
.
查找的基本概念
➢ 查找又称为查询或检索,是在一批记录中依照某个域 的指定域值,找出相应的记录的操作。
➢ 在计算机中,被查找的数据对象是由同一类型的记录 构成的集合,可称之为查找表(search table)。
};
每个结点包含两部分 内容:Key 和info
其他 信息
15.06.2020
8
.
(2)算法的实现:
技巧:把待查关键字key存入表头或表尾(俗称“哨兵”), 这样可以加快执行速度。
例: 若将待查找的特定值key存入顺序表的首部(如0号单
元),则顺序查找的实现方案为:从后向前逐个比较!
int Search_Seq( SSTable ST , KeyType key ){
统计意义上的
第九章 查找
由于查找运算的使用效率很高,几乎在任意一个计算 机系统软件和应用软件中都会涉及到,所以当问题所涉及 的数据量相当大时,查找方法的效率就显得格外重要。
在一些实事查询系统中尤其如此。因此,本章将系统 地讨论各种查找方法,并通过对它们的效率分析来比较各 种查找方法的优劣。
15.06.2020
1
ST[0].key=key;
视哨,r用etu来rn 判i; 断表是
for( i=ST.length; ST.elem[ i ].key!=key; - -否。i })查当;/*找n从>完表1毕0尾0往(0 时前技查,巧*)查/
return i;
0 1 2 3 找4时间将5 减少6 一半7 。 10 20 40 80 30 60 25
➢ 查找算法中的基本运算是记录的关键字与给定值所进行的 比较,其执行时间通常取决于比较的次数。因此,通常以 关键字与给定值进行比较的记录个数的平均值,作为衡量 查找算法好坏的依据。
15.06.2020
4
.
查找表操作及分类
➢ 操作:
(1)查询某个“特定的”数据元素是否在查找表中;
(2)某个“特定的”数据元素的各种属性;
判断 是否 越界.
9
顺序查找的算法:
使用了监视哨,在查
int Search_seq(SSTable ST[ ], { int i=n;
int n,
int
key找步) f{o过都r(i程去=n;中判i>断,0; -是不-i)否用
每 查
一 找
结束if(。ST0.e单lem元[ i被].k当ey=作ke监y)
//在顺序表ST中,查找关键字与key相同的元素;若成功,返回其 位置信息,否则返回0
ST.elem[0].key =key; //设立哨兵,可免去查找过程中每一步
都要检测是否查找完毕,0单元被当作监视哨,用来判断表是否查
找完毕(技巧)。当n>1000时,查找时间将减少一半。
监视
for( i=ST.length; ST.elem[ i ].key!=key; - - i ); 哨的
➢ 顺序查找的存储结构要求:
顺序查找方法既适用于线性表的顺序存储结构,也适用于线性表的链 式存储结构(使用单链表作为存储结构时,扫描必须从第一个结点开始), 顺序查找对数据在表中存放的先后次序没有任何要求。
15.06.2020
7
.
➢ 顺序查找的线性表定义如下:
typedef struct { ElemType *elem; int length;
讨论① 查找效率怎样计算?
——用平均查找长度ASL衡量。
平均查找长度: 为确定记录在查找表中的位置,需和给定值进行比较的
关键字个数的期望值称为查找算法在查找成功时的平均查 找长度(Average Search Length)。
15.06.2020
.
11
平均查找长度(ASL:average search length)。
} ADT StaticSearchTable
15.06.2020
6
.
一、顺序查找
在表的组织方式中,线性表是最简单的一种。顺序查找 是一种最简单的查找方式。
➢ 顺序查找的基本思想是:
从线性表的一端开始,依次将扫描到得结点关键字和给定值K相比较。 若当前扫描到得结点关键字与K相等,则查找成功;若扫描结束后,仍未 找到关键字等于K的结点,则查找失败。
➢ 在实际应用问题中,每个记录一般包含有多个数据域, 查找是根据其中某一个指定的域进行的,这个作为查 找依据的域称为关键字(key)。
15.06.2020
3
.
➢ 对于给定的关键字的值,如果在表中经过查找能找到相应 的记录,则称查找成功,一般可输出该记录的有关信息或 指示该记录在查找表中的位置。若表中不存在相应的记录, 则称查找不成功,此时应该给出不成功的信息。
➢ 抽象数据类型静态查找表的定义: ADT StaticSearchTable{ 数据对象D: D是具有相同属性的数据 元素的集合。 数据关系R:数据元素同属一个集合。 基本操作P: Create(&ST,n); Destroy(&ST);
Search(ST,key);Traverse(ST,Visit());
作用:
//不要用for(i=n; i>0; - -i) 或 for(i=1; i<=n; i++)
无需Leabharlann return i; //若到达0号单元才结束循环,说明不成功,返回0值
(i=0)。成功时则返回找到的那个元素的位置i。
} /1/5S.0e6.a20r2c0h_Seq
选单择元0当处作理. 监比视较哨麻,烦因,为不在小数心组就里出面错0
(3)在查找表中插入一个数据元素;
(4)从查找表中删去某个数据元素。
➢ 分类:
若对查找表只作(1)和(2)两种操作,则称此类查找表为静 态查找表。
若在查找过程中同时插入查找表中不存在的数据元素,或 者从查找表中删除已存在的某个数据元素,则称此类查找表 为动态查找表。
15.06.2020
5
.
9.1 静态查找表