数据结构第八章查找教案.

合集下载

数据结构耿国华高教版 第8章

数据结构耿国华高教版 第8章

顺序结构有关数据类型的定义:
#define LIST_SIZE 20
typedef struct { KeyType key;
OtherType other_data;
} RecordType; typedef struct {
RecordType
r[LIST_SIZE+1];
/* r[0]为工作单元 */
基于线性表的查找法
比较式查找法 查找的基本方法:
基于树的查找法
计算式查找法-HASH(哈希)查找法
8.2 基于线性表的查找法
具有顺序查找法、折半查找法和分块查找法三种
8.2.1 顺序查找法 顺序查找法的特点是:用所给关键字与线性表中 各元素的关键字逐个比较,直到成功或失败。 顺序结构 存储结构: 链式结构
设关键字的输入顺序为:45,24,53,12,28,90, 按上述算法生成的二叉排序树的过程:
45 45
空树 插入45
45 24
插入53
24
插入24
53
45 24 12
插入12
45 53 12 24 28
插入28
45 53 12 24 28
插入90
53 90
对同样一些元素值,如果输入的顺序不同,则所建 的二叉树形态也不同。如果将上述例子中的关键字 顺序变为:24,53,90,12,28,45,则生成的二叉排序树 为:
主关键字:如果一个关键字可以唯一标识列表中的 一个数据元素,则称其为主关键字,否则为次关键 字。当数据元素仅有一个数据项时,数据元素的值 就是关键字。
查找:根据给定的关键字值,在特定的列表中确定 一个其关键字与给定值相同的数据元素,并返回该 数据元素在列表中的位置。 在查找算法中要用到三类参量,即: ①查找对象K(找什么) ②查找范围L(在哪找) ③查找的结果(K在L中的位置) 其中①、 ②为输入参量,在函数中不可缺少。 ③为输出参量,可用函数返回值表示。

数据结构课件第八章查找优秀课件

数据结构课件第八章查找优秀课件

low
mid
high
1 2 3 4 5 6 7 8 9 10 11
5 13 19 21 37 56 64 75 80 88 92
low mid high 1 2 3 4 5 6 7 8 9 10 11 5 13 19 21 37 56 64 75 80 88 92
查找第i个元素: n+1-i
查找失败:
n+1
iii 比较次数=5
顺序查找方法的ASL
n
对含 n个 有记录的 AS表 L , pici i1
设表中每个元 概素 率的 相 pi查 等 1n找
n
则AS L
i1
pici
1 n i ni1
1n(n1) n2
n1 2
7.2.2 折半查找
1. 折半查找的基本思想 折半查找要求查找表用顺序存储结构存放且各数 据元素按关键字有序(升序或降序)排列,也就是说 折半查找只适用于对有序顺序表进行查找。
查找——也叫检索,是根据给定的某个值,在表中确定一 个关键字等于给定值的记录或数据元素
关键字——是数据元素中某个数据项的值,它可以标识一 个数据元素
查找方法评价
查找速度
占用存储空间多少
算法本身复杂程度
平均查找长度ASL(Average Search Length):为确定记 录在表中的位置,需和给定值进行比较的关键字的个 数的期望值叫查找算法的~
7.2 静态查找
正如本章第一节所述:静态查找是指在静态查找 表上进行的查找操作,在查找表中查找满足条件的数 据元素的存储位置或各种属性。本节将讨论以线性结 构表示的静态查找表及相应的查找算法。
7.2.1 顺序查找
1. 顺序查找的基本思想

数据结构课件-第八章

数据结构课件-第八章

8.3.1 顺序查找
顺序查找思想:
从表的一端开始,逐个将记录关键字与给定的 值比较。若相等,则查找成功;若所有n 个记录的 关键字值都已比较,其关键字和给定值都不相等,则 查找失败。

若要在顺序表上进行查找,其类型定义:
typedef int KeyType; //关键字类型
typedef struct
r[0].key=k;
if (i>0) return i; return -1; }/*seq_search*/
/*监视哨*/
/*查找成功*/
while (r[i]. key!=k) i--; /*元素比较*/ /*查找失败*/
算法效率分析:
(2)在平均情况下,假定各记录的查找机会均等, 即pi=1/n ,由于找第i个记录需要比较(n-i+1)次,
{ KeyType key; // other fields; //关键字 //其它数据项
} SSTable[MAXSIZE]
算法描述如下:
int Seq_Search(SSTable r,int n,KeyType k) {/*返回关键字等于k的元素在顺序表表r中的位置, n为表中元素的个数*/ int i; i=n;
二、散列函数的构造方法 1、除留余数法是最为简单常用的一种方法,它是以表长m来除关键字,取余数 作为散列地址,即 h(key) = key%m。该方法的关键就是选取m。m一般取为略大 于元素个数的第一个素数。
2、举例:如果给出一组数据(20,30,70,14,8,12,18,60,1,11),因为 一共10个数据,那么m应该选取为略大于10的素数11, 散列函数h(key) = key%11。
0 11

数据结构C语言版第八章 查找

数据结构C语言版第八章 查找

第八章查找重点难点要求理解"查找表"的结构特点以及各种表示方法的适用性;熟练掌握顺序查找和折半查找的方法;熟悉描述折半查找过程的判定树的构造方法;熟练掌握二叉排序树的构造和查找方法;理解二叉平衡树的构造过程;理解B-和B+树的特点、基本操作和二者的区别。

熟练掌握哈希表的构造方法,深刻理解哈希表与其它结构的表的实质性的差别;掌握各种不同查找方法之间的区别和各自的适用情况,能按定义计算各种查找方法在等概率情况下查找成功时的平均查找长度。

典型例题1.若对具有n个元素的有序的顺序表和无序的顺序表分别进行顺序查找,试在下述两种情况下分别讨论两者在等概率时的平均查找长度:(1)查找不成功,即表中无关键字等于给定值K的记录;(2)查找成功,即表中有关键字等于给定值K的记录。

【解】查找不成功时,需进行n+1次比较才能确定查找失败。

因此平均查找长度为n+1,这时有序表和无序表是一样的。

查找成功时,平均查找长度为(n+1)/2,有序表和无序表也是一样的。

因为顺序查找与表的初始序列状态无关。

2.画出对长度为18的有序的顺序表进行二分查找的判定树,并指出在等概率时查找成功的平均查找长度,以及查找失败时所需的最多的关键字比较次数。

【解】等概率情况下,查找成功的平均查找长度为:ASL=(1+2*2+3*4+4*8+5*3)/18=3.556查找失败时,最多的关键字比较次树不超过判定树的深度,此处为5.3.为什么有序的单链表不能进行折半查找?【解】因为链表无法进行随机访问,如果要访问链表的中间结点,就必须先从头结点开始进行依次访问,这就要浪费很多时间,还不如进行顺序查找,而且,用链存储结构将无法判定二分的过程是否结束,因此无法用链表实现二分查找。

4.设二叉排序树中关键字互不相同,则其中最小元必无左孩子,最大元必无右孩子。

此命题是否正确?最小元和最大元一定是叶子吗?一个新结点总是插在二叉排序树的某叶子上吗?【解】此命题正确。

数据结构 第08章 查找

数据结构 第08章  查找

8.2.1 顺序查找
1. 2.
3.
顺序表的顺序查找 单链表的顺序查找 顺序查找算法分析
1 n 1 n(n 1) n 1 ( pi ci ) i O ( n) n i 1 n 2 2 i 1
n
ASL成功
ASL不成功
1 ( pi ci ) ( n) n O(n) i 1 i 1 n
《数据结构(Java版)(第2版)》
n
n
8.2.2 基于有序顺序表的折半查找
1. 2.
折半查找算法描述 折半查找算法实现
《数据结构(Java版)(第2版)》
3.折半查找算法分析
1 21 ASL 成功 (1 2 2 3 3 3 3 4) 2.625 8 8
《数据结构(Java版)(第2版)》
8.2.3 基于索引顺序表的分块查找
1. 2.
索引 分块查找

字典的 分块查 找
《数据结构(Java版)(第2版)》
例8.1 判断一个字符串是否为Java关键字。
《数据结构(Java版)(第2版)》
(2)支持插入和删除操作的索引结构 及其分块查找
《数据结构(Java版)(第2版)》
《数据结构(Java版)(第2Βιβλιοθήκη )》8.1 查找的基本概念
1.
2.
3.
查找操作和查找结果 查找算法 查找算法性能评价
ASL ( pi ci )
i 1 n
《数据结构(Java版)(第2版)》
8.2 基于线性表的查找
8.2.1 顺序查找 8.2.2 基于有序顺序表的折半查找 8.2.3 基于索引顺序表的分块查找
《数据结构(Java版)(第2版)》

数据结构chapter 8 查找.ppt

数据结构chapter 8 查找.ppt

21-Jan-20
20
二叉判定树
折半查找过程可以用一棵二叉树来表示。 树中的每个结点表示查找表中的一个记录 结点的值表示该记录在查找表中的位置 通常情况下称这个描述查找过程的二叉树为二叉判定树。
6
3 1
2
4 5
9 7
8
10 11
21-Jan-20
21
二叉判定树分析(查找成功)
由二叉判定树可见,成功查找结点的过程就是从根结点到树中某 个结点的路径,比较的次数是该结点在二叉判定树上的层次。
折半查找法在查找不成功时和给定值进行比较的次数最多为
log
n 2


1
6
3
9
1
4
7
10
-1
2
3-4
5
6-7
8
9-10
11
1-2
2-3
4-5
5-6
7-8
8-9
10-11
11-
21-Jan-20
23
折半查找的平均查找长度
假定有序表的长度为 n,n=2h-1,h为树的最大深度
由于第j层上的节点数目为 2j-1,这些节点只需要比较j 次
动态查找表的突出特征在于:表的内容本身就是在查 找过程中动态生成的。
对于给定的值key,如果在表中存在关键字等于key记 录,则查找成功,否则就插入关键字等于key的记录。
21-Jan-20
21-Jan-20
4
如何进行查找?
查找过程依赖于数据元素在查找表中的位置。 具体采用什么样的查找方法完全取决于查找表中数据
元素是根据何种关系来组织的。
21-Jan-20

数据结构查找算法课程教学设计

数据结构查找算法课程教学设计

存档编号:西安********课程设计说明书设计题目:查找算法性能分析系别:计算机学院专业:计算机科学班级:计科***姓名:王***(共页)2015年01月07日*****计算机科学专业课程设计任务书一、 设计或实践题目查找算法性能分析二、 内容及要求设计程序,对比分析顺序查找、折半查找、索引查找、二叉排序树查找和散列查找 五种查找算法的性能1、 测试数据的个数不少于 50个;2、 对每一种查找算法设计实现适应的存储结构;3、 输出每种查找算法的查找成功时的平均长度三、 完成形式1、 设计报告;2、 源程序四、 系(部)审核意见姓名: 班级: 计科学号:指导教师:发题日期:2015-01-05完成日期:2015-01-09一需求分析1. 1 问题描述查找又称检索,是指在某种数据结构中找出满足给定条件的元素。

查找是一种十分有用的操作。

而查找也有内外之分,若整个查找过程只在内存中进行称为内查找;若查找过程中需要访问外存,则称为外查找,若在查找的同时对表做修改运算(插入或删除),则相应的表成为动态查找表,反之称为静态查找表。

由于查找运算的主要运算是关键字的比较,所以通常把查找过程中对关键字的平均比较次数(也叫平均查找长度)作为一个查找算法效率优劣的标准。

平均查找程度ASL 定义为:ASL= X PiCi (i 从1 到n)其中Pi 代表查找第i 个元素的概率,一般认为每个元素的查找概率相等,Ci 代表找到第i 个元素所需要比较的次数。

查找算法有顺序查找、折半查找、索引查找、二叉树查找和散列查找(又叫哈希查找),它们的性能各有千秋,对数据的存储结构要求也不同,譬如在顺序查找中对表的结果没有严格的要求,无论用顺序表或链式表存储元素都可以查找成功;折半查找要求则是需要顺序表;索引表则需要建立索引表;动态查找需要的树表查找则需要建立建立相应的二叉树链表;哈希查找相应的需要建立一个哈希表。

1. 2 基本要求(1) 输入的形式和输入值的范围;在设计查找算法性能分析的过程中,我们调用产生随机数函数:srand((int)time(0));产生N 个随机数。

数据结构授课教案-第8章查找

数据结构授课教案-第8章查找
return mid;
elseif(kx<tbl.elem[mid].key)
low=mid+1;
else
high=mid-1;
}
return 0;
}
【性能分析】
折半查找过程可用一棵判定树来描述。判定树中每一结点对应表中一个记录,但结点值不是记录的关键字,而是记录在表中的位置序号。根结点对应当前区间的中间记录,左子树对应前一子表,右子树对应后一子表。


折半查找的算法和分析;二叉排序树的插入和删除;平衡二叉树的平衡化方法;B-树的插入和删除方法;哈希表的构造方法。
作业布置
习题9
参考书
1.数据结构题集(C语言版),严蔚敏,清华大学出版社,2002。
3. 数据结构、算法与应用-C++语言描述,(美)SartajSahni著,汪诗林等译,机械工业出版社,2002。
本章以后讨论中,涉及的关键码类型和数据元素类型统一说明如下:
typedefstruct{
KeyTypekey;/*关键码字段,可以是整型、字符型、构造型等*/
……/*其它字段*/
}ElemType;
9.2静态查找表
9.2.1静态查找表结构
静态查找表是数据元素的线性表,可以是基于数组的顺序存储或以线性链表存储。
二叉排序树(查找表)的类型定义:
typedefintKeyType;//设关键字的类型可直接进行比较
typedefstructnode {
KeyTypekey ; /*关键字的值*/
……/*其它字段的值*/
structnode*lchild,*rchild;/*左右指针*/
}BitNode,*BiTree;

数据结构(C语言版)教学指导:第8章 查找的分析与应用

数据结构(C语言版)教学指导:第8章 查找的分析与应用
散列函数中的除留余数法
教学难点
线性表的二分查找方法
二叉排序树的删除方法
散列函数中解决冲突的方法,包括开放地址法和拉链法
教学计划
教材章节
学习内容
课时分配
第8章8.1∽8.2
全部微课
微课8-1 查找的概念
学生自主
提前预习
微课8-2 顺序查找
微课8-3 二分法查找
微课8-4 分块查找
第8章8.1∽8.2
查找的基本概念
第8章8.4
全部微课
微课8-9 散列表的概念
学生自主
提前预习
微课8-10 散列函数的构造方法
微课8-11 散列技术开放定址解决冲突法
微课8-12 散的概念
2课时
散列函数的构造方法:除留余数法
散列函数处理冲突的方法,包括开放地址法和拉链法
备注
除软件技术专业以外,散列技术的相关知识可以选讲
2课时
线性表的顺序查找方法
线性表的二分查找方法
线性表的分块查找方法
第8章8.3
全部微课
微课8-5 二叉排序树的定义
学生自主
提前预习
微课8-6 二叉排序树的建立
微课8-7 二叉排序树的删除
微课8-8 二叉排序树的查找
第8章8.3
二叉排序树的定义
2课时
二叉排序树的插入和生成
二叉排序树的删除
二叉排序树的查找
理论课时
6课时
实践课时
2课时
教学方法
引导启发法、实例演示法
教学目标
了解查找的基本概念
熟练掌握线性表的顺序查找和二分查找方法
了解线性表的分块查找方法
掌握二叉排序树的定义、生成和删除方法

数据结构(Java版)-电子教案 第八章 查找

数据结构(Java版)-电子教案  第八章 查找
1 7 3 5 4 6 2
8.2 静态查找表
平均查找长度: 查找的过程就是将给定的Key值与文件中各记录的关键字 项进行比较的过程。所以用比较次数的平均值来评估算法 的优劣。称为平均查找长度ASL。对于含有n个记录的表, 查找成功时的平均查找长度为: n ASL=∑ PiCi i=1 其中,Pi为查找表中第i个记录的概率,且Pi=1;Ci为查 找到第 i 个元素所需比较次数。 Ci取决于所查记录在表 中的位置。 例:查找记录r[n]时,仅需比较一次;而查找记录r[1] 时,则需比较n次。一般情况下Ci等于n-i+1。
图8-1 查找示意图
8.1 查找的基本概念
主关键字:数据元素(或记录)中某个数据项的值,用它 可以标识(识别)一个数据元素(或记录)。 次关键字:通常不能惟一区分各个不同数据元素的关键字。
查找表:是一种以同一类型的记录构成的集合为逻辑结构, 以查找为核心运算的数据结构。 由于“集合”中的数据元素之间存在着松散的关系,因此 查找表是一种应用灵便的结构。
8.2 静态查找表
物理意义: 假设每一元素被查找的概率相同,则查找每一元素所需的 比较次数之总和再取平均,即为ASL。 平均查找长度算法: 查找第n个元素所需的比较次数为1; 查找第n-1个元素所需的比较次数为2; …… 查找第1个元素所需的比较次数为n; 总计全部比较次数为:1+2+…+n = (1+n)n/2 若求某一个元素的平均查找次数,还应当除以n(等概率), 即: ASLcc=(1+n)/2(查找成功的情况) ,时间 效率为 O(n)。
8.2 静态查找表
假设每次查找都是成功的,即Pi=1,则: ASL= nP1+(n-1)P2 +… + 2Pn-1+Pn 若,假设每个记录的查找概率相等,即 Pi=1/n,则: ASL= [n+(n-1)+… + 2+1]/n=(n+1)/2 若,假设每个记录的查找概率不相等,则 ASL= nP1+(n-1)P2 +… + 2Pn-1+Pn取得极小 值的情形是: P1≦ P2≦ … ≦ Pn-1 ≦ Pn 若,假设查找“成功”和“不成功”的概率相等;查找 成功时,每个记录的查找概率相等,即 Pi=1/(2n),则: ASL= [n+(n-1)+… + 2+1]/(2n)+(n+1)/2=3(n+1)/4

《数据结构(C语言版)》教案 第8章 图(电子版)

《数据结构(C语言版)》教案 第8章 图(电子版)

第八章图本章教学提要教学重点:图的概念及术语图的存储结构图的连通性图的深度优先搜索和广度优先搜索教学难点:图的深度优先搜索和广度优先搜索最短路问题本章教学内容8.1图的概念及术语图是一种数据结构,它的形式化定义是:G=(V,R)这里G表示一个图,V是表示各个数据对象的顶点集合,R是V中若干顶点对的集合,若有某两顶点的点对属于R,则在图G中存在这两点间的直接通路。

可见,图是由点的集合与点对的集合共同构成的。

设x和y都是V中的顶点,x和y的点对属于R,如果该点对是个有序点对就表示为<x,y>,它所代表的是从x到y的有方向的直接通路,x称为出点,y称为入点。

这种有方向的直接通路也称为弧。

在图G=(V,R)中,如果对A中任意的<x,y>都有<y,x>也属于A,则称G为无向图,此时有序点对<x,y>和<y,x>可用一个无序点对(x,y)来表示,(x,y)称为边,x和y都称为此边的端点。

若<x,y>属于A,则称点x邻接点y,点x在g中邻接的所有点的集合称为x的出邻域,邻接x的所有点的集合称为x点的入邻域,x的出邻域的点数称为x的出度,x的入邻域的点数称为x的入度。

在无向图中,点的出邻域等于入邻域,称为邻域。

点的出度等于入度,称为点的度。

如果图G的每个点的度数都是k,则称G为k正则图。

边(x,y)与x和y的关系都叫做关联,所以某点的度又可理解为与它关联的边数。

一个图中除了顶点表示数据对象外,弧或边也可以有自己的数据,这些数据叫做权,例如两点间的距离、从一点到邻接点的某项费用等都可以作为弧或边的权,这种弧或边带有数据的加权图称为网。

设图G1=(V1,R1),如果V1是V的子集,且R1是R的子集,则称图G1是G=(V,R)的子图。

如果图G中的任意两点x、y,都存在一条直接或间接的通路p(x,y),则称G为连通图。

如果连通图中的任意两点x和y之间都至少有k条互不相交的路径(除x和y没有相同点的路径),这个图可称为k连通图。

数据结构顺序查找教学案例

数据结构顺序查找教学案例

数据结构顺序查找教学案例一、教学目标掌握顺序查找的基本原理和方法;了解顺序查找的应用场景;掌握使用顺序查找解决实际问题的能力;培养学生对数据结构的兴趣和热情。

二、教学内容顺序查找的基本原理和方法;顺序查找的应用场景;使用顺序查找解决实际问题。

三、教学步骤导入新课:通过实例引导学生了解顺序查找的概念和作用。

例如,展示一个未排序的数组,让学生了解顺序查找可以快速找到特定元素。

讲解顺序查找的基本原理和方法:通过示例和图表等手段,让学生理解顺序查找的基本原理和方法。

例如,通过一个简单的数组示例,让学生了解顺序查找的基本步骤。

探究顺序查找的应用场景:通过案例分析,让学生了解顺序查找在实际生活中的应用场景。

例如,介绍在数据库中如何使用顺序查找快速查找特定信息。

使用顺序查找解决实际问题:通过具体的问题解决过程,让学生掌握使用顺序查找解决实际问题的能力。

例如,让学生通过顺序查找解决一个实际生活中的问题,如在一个未排序的电话簿中查找特定电话号码。

课堂活动:设计一些有趣的课堂活动,让学生实际操作并体验顺序查找的过程。

例如,可以让学生在一个未排序的单词表中查找特定单词,看谁找得最快。

总结反馈:通过学生的实践和反馈,了解学生对顺序查找的理解和应用情况,及时进行指导和纠正。

同时,让学生总结顺序查找的优点和局限性,加深对顺序查找的认识。

布置作业:布置一些与顺序查找相关的练习题和思考题,让学生进一步巩固和拓展所学的知识。

例如,可以让学生编写一个简单的顺序查找程序,或者思考如何优化顺序查找等。

下次预告:预告下一节课的教学内容,让学生提前预习和准备。

例如,可以预告下一节课将介绍二分查找的概念和原理。

四、教学评价观察学生的表现:观察学生在课堂上的参与度、注意力、实践操作等情况,评价学生对顺序查找的理解和应用程度。

听取学生的反馈:在课后或者通过作业等方式,听取学生对教学的反馈和建议,以便不断改进教学方法和策略。

测试学生的应用能力:通过一些测试题或者实际问题,检测学生对顺序查找的应用能力,以便及时发现问题并进行针对性的指导。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
第 八 章
查 找
8.1 何谓查找表 ?
查找表是由同一类型的数据元
素(或记录)构成的集合。
由于“集合”中的数据元素之间存
在着松散的关系,因此查找表是一种应
用灵便的结构。
对查找表经常进行的操作:
• 1)查询(检索)某个“特定的”数据 元素是否在查找表中及各种属性; • 2)在查找表中插入一个数据元素;
职工号 JS001 JS002 JS003 JS004 DZ001 DZ002 DZ003 JJ001 JJ002 HG001 HG002
平均查找长度 (Average Search Length) 顺序查找的时间性能
为确定记录在查找表中的位置,需和给定值
进行比较的关键字个数的期望值
ASL Pi Ci
i 1
n
n 为表长,Pi 为查找表中第i个记录的概率, 且
P 1
i 1 i
n
Ci为找到该记录时,曾和给定 值比较过的关键字的个数。
一个索引表.
索引顺序表的查找过程:
1)由索引确定记录所在区间;
2)在顺序表的某个区间内进行查找。 索引顺序查找的过程也是一个 “缩小区间”的查找过程。
索引可以根据查找表的特点来构造。
struct IndexItem { IndexKeyType index; //IndexKeyType //为事先定义的索引值类型 int start; //子表中第一个元素所在的下标位置 int length; //子表的长度域 }; typedef IndexItem indexlist[ILMSize];
A 21 37 88 19 92 05 64 56 80 75 13 64
0 1 2 3 4 5 6 7 8 9 10 11
i
i
key=64 A i i
2 3 4 5 6 7 8 9 10 11
21 37 88 19 92 05 64 56 80 75 13 60
0 1
key=60
int Seqsch1(ElemType A[], int n, KeyType K) { A[n].key=K; //设置岗哨 for(int i=0; ; i++) if(A[i].key==K) break; if(i<n) return i; else return -1; }
• 3)从查找表中删去某个数据元素。
查找表可分为两类:
静态查找表
仅作查询和检索操作的查找表。
动态查找表
有时还需要将“查询”结果为“不在查 找 表中”的数据元素插入到表中;或者, 从查找表中删除其“查询”结果为“在 查
关键字
是数据元素(或记录)中某个数据项 的值,用以标识(识别)一个数据元 素(或记录)。 若此关键字可以识别唯一的一个 记录,则称之谓“主关键字”。 若此关键字能识别若干记录,则称 之谓“次关键字”。
查找
根据给定的值,在查找表中确定一个关 键字等于给定值的数据元素或(记录)。 若查找表中存在这样的记录,则称
“查找成功”。查找结果给出整个记录的
信息,或指示该记录在查找表中的位置; 否则称“查找不成功”。查找结果给 出“空记录”或“空指针”。
一.
静态查找表
二. 三.
动态查找表 哈希表
一.
静态查找表
A
0 1 2 3 4 5 6 7 8 9 10 05 13 19 21 37 56 64 75 80 88 92
low
low high mid mid mid
high
low 指示查找区间的下界 high 指示查找区间的上界 mid = (low+high)/2
int Binsch(ElemType A[], int n, KeyType K) { int low=0, high=n-1; //上界和下界 while(low<=high) { int mid=(low+high)/2; //求中间点 if(K==A[mid].key) return mid; //查找成功 else if(K<A[mid].key) high=mid-1; //修改上界 else low=mid+1; //修改下界} return -1; //查找失败返回-1 }
h 1 1 j 1 ASLbs Ci j 2 n i 1 n j 1 n +1 log2 (n + 1) 1 n 在n>50时,近似 ASL bs log2 (n +先把一个线性表(主表)按照一定的 函数关系或条件划分成若干个逻辑上 的子表,为每个子表分别建立一个索 引项,由所有这些索引项构成主表的
分析折半查找的平均查找长度
先看一个具体的情况,假设:n=11
i 1 2 3 Ci 3 4 2 4 5 6 3 4 1 7 8 3 4 9 10 11 2 3 4
3
6 4
5
判定树
1
2
7
8
9
10
11
表长为 n 的折半查找的判定树的深度和 含有 n 个结点的完全二叉树的深度相同。 假设 n=2h-1 并且查找概率相等
int Seqsch(ElemType A[], int n, KeyType K) //从顺序表A[0],A[1],...,A[n-1]的n个元 //素中顺序查找出关键字为K的元素. { for(int i=0; i<n; i++) if(A[i].key==K) break; //查找成功返回该元素的下标i, 否则返回-1。 if(i<n) return i; else return -1; }
8.2.1 顺序查找 8.2.2 二分查找 8.3 索引顺序
8.2 顺序查找表
以顺序表或线性链表
表示静态查找表
顺序表的查找过程:
A
k
0 1 2 3 4 5 6
k
7 8 9 10 11
21 37 88 19 92 05 64 56 80 75 13
假设给定值 e=64,
要求 A[k] = e, 问: k = ?
对顺序表而言,Ci = i
1 Pi 在等概率查找的情况下, n
顺序表查找的平均查找长度为:
n +1 ASLss 2
二、有序查找表
顺序查找表的查找算法简单, 但
平均查找长度较大,特别不适用于
表长较大的查找表。 若以有序表表示静态查找表,
则查找过程可以基于“折半”进行。
key=64 的查找过程:
相关文档
最新文档