查找(1)静态查找

}SSTable;
9.1.1 顺序表的查找
顺序查找(线性查找)
(2)顺序查找算法的实现
int Search_Seq( SSTable ST , KeyType key ){ //在顺序表ST中,查找关键字与key相同的元素;若成功,返回其 位置信息,否则返回0
ST.elem[0].key =key; //设立哨兵 for( i=ST.length; ST.elem[ i ].key!=key; - - i );
块1 块2 块3 块4
9.1.4 索引顺序表的查找
分块查找(索引顺序查找)
索引顺序查找的算法分析
分块查找算法的时间复杂度为:ASL=Lb+Ls 其中Lb为对索引表的平均查找长度;Ls为块内查找的平均查找长度。 一般索引表采用折半查找,块内采用顺序查找 则算法的平均复杂度为Lb=log2(b+1)-1, Ls=(s+1)/2 所以 ASL= Lb+Ls=log2(b+1)-1+(s+1)/2
④ 灵活运用各种查找算法解决一些综合问题。
概述
本章的“查找”(Searching)及第十章的“排序”(So rting)都是建立在数据结构上的两个重要运算。
查找又称为“检索”,是在给定信息集上寻找特定信 息元素的过程。查找是一种十分有用的操作,例如,在 学生成绩表中查找某个学生的成绩记录,在图书馆的书 目文件中查找某编号的图书记录等。
9.1.4 索引顺序表的查找
分块查找(索引顺序查找)
1.分块
设记录表长为n,将表的n个记录分成b= ⎡n/ s⎤ 个块,每块s个记录(最后一
块记录数可以少于s个),即:
且表分块有序,即第i(1≤i≤b-1)块所有记录的key小于第i+1块中记录的 key,但块内记录可以无序。
2.建立索引
每块对应一索引项: kmax link
9.1 静态查找表
静态查找是指在静态查找表上进行的查找操作,在查 找表中查找满足条件的数据元素的存储位置或各种属性。 本节将讨论以线性结构表示的静态查找表及相应的查找 算法。 针对静态查找表的查找算法主要有:
顺序查找(线性查找) 折半查找(二分或对分查找)
静态树表的查找 分块查找(索引顺序查找)
9.1.1 顺序表的查找
概述
对查找表经常进行的操作有: ① 查询某个“特定”数据元素是否在查找表中; ② 检索某个“特定”数据元素的各种属性; ③ 在查找表中插入一个数据元素; ④ 从查找表中删去某个数据元素;
若只对查找表进行类似①②的“查找”操作,此类查找表 称为静态查找表。
若在查找过程中,同时会进行类似③④的“更新”操作, 此类查找表称为动态查找表。
9.1.2 有序表的查找
折半查找(二分或对分查找)
折半查找的基本思路:对给定值k,逐步确定待查记录所 在区间,每次将搜索空间减少一半(折半),直到查找成功或 失败为止。
9.1.2 有序表的查找
折半查找(二分或对分查找)
Eg9-2 折半查找举例,已知有如下12个元素的有序表 (3,12,18,20,32,55,60,68,80,86,90,100)请查找关键字 为20的数据元素。
概述
由于查找的主要运算是关键字的比较,所以通常 把查找过程中对关键字需要执行的平均比较次数(也 称为平均 查找长度)作为衡量查找算法效率优劣的标 准。
平均查找长度ASL(Average Search Length)定义为:
ASL=∑pici
其中n是查找表中记录的个数,pi是第i个记录的概 率,一般认为每个记录的查找概率相等,即pi=1/n
本节小结
① 介绍了查找表的基本概念 ② 介绍了集中静态查找的查找算法:顺序查找、折半查
找和索引顺序查找。 ③ 上面讨论了三种较为简单的查找算法。
查找方法 比较项目
ASL
顺序查找 最长
折半查找 最短
分块查找 居中
效率 表结构
最低
最好
居中
表不作任何要 要求表按key有 求,且适应链 序,且表要顺 表结构的查找。 序存储
本章讨论查找的基本概念、不同数据结构下的查找算 法及查找效率分析等问题。
概述
因为查找是对已经存入计算机中的数据所进行的运算,所以采用何 种查找方法,首先取决与使用那种数据结构来表示“查找表”
查找表(Search Table) 由同一类型的数据元素(或记录)构成的集合。
查找
• 查询(Searching)特定元素是否在表中。
……
若r.data[i].key=k, Ci=n-i+1;
……
若r.data[1].key=k,
则ASL=nP1+(n-1)P2+…+2Pn-1+Pn 假设每个记录的查找概率相等,Pi=1/n 则ASL= ∑PiCi =(1/n) ∑(n-i+1)=(n+1)/2
C1=n
9.1.1 顺序表的查找
顺序查找(线性查找)
要求表逐段有 序
解:① 先设定3个辅助标志: low, high, mid,
03 12 18 20 32 55 60 68 80 86 90 100
low
mid low high mid
high
第三次命中元素
9.1.2 有序表的查找
折半查找(二分或对分查找)
② 算法描述
int Binsearch(sqlist r,keytype k) //对有序表r折半查找的算法//
(3)顺序查找算法的性能分析
由上分析可知,查找成功时:ASL=O(n) 查找失败时,查找次数等于n,同样为O(n)。 对查找算法,若ASL=O(n),则效率是最低的,意味着查找某记录 几乎要扫描整个表,当表长n很大时,会令人无法忍受。 顺序查找的优点是:算法简单且适应面广。它对表的结构无任何 要求,无论记录是否按关键字有序均可应用,而且上述结构对线 性链表也适合。
第9章 查找(1)
静态查找表 主讲:刘春
学习目标
① 理解查找的基本概念,包括静态查找表和动态查找表, 内查找和外查找之间的差异以及平均查找长度。
② 重点掌握线性表上各种查找算法、包括顺序查找、二 分查找和分块查找的基本思想、算法实现和查找效率
③ 掌握哈希表查找技术以及哈希表与其他存储方法的本 质区别
6
3
9
1
47
11
2
5 8 10 12
查找过程可用二叉树描述:每个记录 用一个结点表示;结点中值为该记录 在表中位置,这个描述查找过程的二 叉树称为判定树。n个元素的表的折 半查找的判定树是唯一的,即:判定 树由表中元素个数决定。
找到有序表中任一记录的过程就是:走了一条从根结点到与该记录相应的结点 的路径。 比较的关键字个数:为该结点在判定树上的层次数。
其中kmax为该块内记录的最大key;link为该块第一记录的序号(或指针)。
9.1.4 索引顺序表的查找
分块查找(索引顺序查找)
Eg9-3:设表长n=19,取s=5,b=‫ڿ‬19/5‫ =ۀ‬4, 则分块索引结构如图所示
算法思路 分块索引查找分两步进行:
Kmax 18
序号 1
(1)由索引表确定待查找记录 所在的块;
课堂练习
使用折半查找算法时,要求被查文件( C、D ) A.采用链式存贮结构 B.记录的长度≤128 C.采用顺序存贮结构 D.记录按关键字递增有序
思考:假设在有序线性表a[20]上进行折半查找,则平均 查找长度为 5 。
9.1.4 索引顺序表的查找
分块查找(索引顺序查找)
分块查找(Blocking Search),又称索引顺序查找(Indexed Sequential Search),是顺序查找方法的一种改进,目的也是 为了提高查找效率。
• 查找成功时比较的关键字个数最多不超过树的深度 d :d = ⎣ log2 n ⎦ + 1 • 查找不成功的过程 就是走了一条从根结点到外部结点的路径。
9.1.2 有序表的查找
折半查找(二分或对分查找)
③ 折半查找的算法分析
折半查找的效率比顺序查找高,但折半查找只适用于有序表,且 限于顺序存储结构,对链表或无序的线性表无法有效地进行折半 查找。
查找成功 查找失败
• 若表中存在特定元素,称查找成功,应输出该记录
• 若表中存在特定元素,称查找不成功(也应输出失败 标志或失败位置)
概述
示例9-1:在如下学生表中查找学号为98011的学生信息。
学号
98011 98012
…
姓名
张娟 赵军 …
性别
女 男 …
年龄
20 19 …
分析: 在这个例子中,待查找的数据单位(或数据元素)是一条记录。而 记录又由若干数据项(或属性)组成。 若某个数据项的值能标识(或识别)一个或一组记录,称其为关键 字(key)。 若一个key能唯一标识一个记录,称此key为主key。 若一个key能标识一组记录,称此key为次key。
(2)在块内顺序查找。
50
6
84 11
108 16
查找失败情况,
(索引表)
一是给定k值超出索引表范围;
二是若k落在某块内,但该块中无key=k的记录。
序号 R.key
1
18
2
10
3
9
4
8
5
16
6
20
7
38
8
42
9
19
10
50
11
84
12
72
13
56
14
55
ห้องสมุดไป่ตู้15
76
16
100
17
90
18
88
19
108
合集下载

绪论

绪论

查找1.查找表是由同一类型的数据元素(或记录)构成的集合2.对查找表的操作:查询某个“特定的”数据元素是否在查找表中;检索某个“特定的”数据元素的各种属性;在查找表中插入一个数据元素;从查找表中删去某个数据元素3.静态查找表:仅作查询和检索操作的查找表。

4.动态查找表:在查找过程中同时插入查找表中不存在的数据元素,或者从查找表中删除已存在的某个数据元素,此类表为动态查找表5.关键字:是数据元素(或记录)中某个数据项的值,用以标识(识别)一个数据元素(或记录)。

6.查找:根据给定的某个值,在查找表中确定一个其关键字等于给定值的数据元素或(记录)。

7.平均查找长度ASL:为确定记录在表中的位置,需和给定值进行比较的关键字的个数的期望值叫查找算法的~8.顺序表的查找:从表的一端开始逐个进行记录的关键字和给定值的比较。

9.顺序表查找的平均查找长度为:ASL=(n+1)/2 。

顺序表的查找算法简单,但平均查找长度较大,不适用于表长较大的查找表。

10.折半查找:每次将待查记录所在区间缩小一半。

适用于采用顺序存储结构的有序表。

ASL=log2(n+1)--111.索引顺序查找:又称分块查找,将表分成几块,块内无序,块间有序;先确定待查记录所在块,再在块内查找。

适用于分块有序表12.动态查找表的特点:表结构本身是在查找过程中动态生成。

若表中存在其关键字等于给定值key的记录,表明查找成功;否则插入关键字等于key的记录。

13.二叉查找树:二叉排序树或者是一棵空树;或者是具有如下特性的二叉树:若它的左子树不空,则左子树上所有结点的值均小于根结点的值;若它的右子树不空,则右子树上所有结点的值均大于根结点的值;它的左、右子树也都分别是二叉排序树。

14.二叉排序树的查找算法:若二叉排序树为空,则查找不成功;否则1)若给定值等于根结点的关键字,则查找成功;2)若给定值小于根结点的关键字,则继续在左子树上进行查找;3)若给定值大于根结点的关键字,则继续在右子树上进行查找。

数据结构第九章--查找-习题及答案

数据结构第九章--查找-习题及答案

第九章查找一、选择题1•若查找每个记录的概率均等,则在具有n 个记录的连续顺序文件中采用顺序查找法查找一个记录,其平均查找长度ASL 为()。

A .(n-1)/2B.n/2C.(n+1)/2D.n 2. 下面关于二分查找的叙述正确的是()A. 表必须有序,表可以顺序方式存储,也可以链表方式存储C.表必须有序,而且只能从小到大排列B. 表必须有序且表中数据必须是整型,实型或字符型D.表必须有序,且表只 能以顺序方式存储3. 用二分(对半)查找表的元素的速度比用顺序法() A. 必然快B.必然慢C.相等D.不能确定4. 具有12个关键字的有序表,折半查找的平均查找长度()A.3.1B.4C.2.5D.55.当采用分块查找时,数据的组织方式为()A. 数据分成若干块,每块内数据有序B. 数据分成若干块,每块内数据不必有序,但块间必须有序,每块内最大(或最小)的数据组成索引块C. 数据分成若干块,每块内数据有序,每块内最大(或最小)的数据组成索引块D. 数据分成若干块,每块(除最后一块外)中数据个数需相同6. 二叉查找树的查找效率与二叉树的((1))有关,在((2))时其查找效率最低(1) :A.高度B.结点的多少C.树型D.结点的位置(2) :A.结点太多B.完全二叉树C.呈单枝树D.结点太复杂。

7. 对大小均为n 的有序表和无序表分别进行顺序查找,在等概率查找的情况下,对于查找失败,它们的平均查找长度是((1)),对于查找成功,他们的平均查找长度是((2))供选择的答案:A.相同的B.不同的9.分别以下列序列构造二叉排序树,与用其它三个序列所构造的结果不同的是()A .(100,80,90,60,120,110,130)B.(100,120,110,130,80,60,90) C. (100,60,80,90,120,110,130)D.(100,80,60,90,120,130,110)10. 在平衡二叉树中插入一个结点后造成了不平衡,设最低的不平衡结点为A,并已知A 的左孩子的平衡因子为0右孩子的平衡因子为1,则应作()型调整以使其平衡。

第8章 查找(1)

第8章 查找(1)
不妨假设p=q=0.5,并且所有关键字成功查找的概率相同,即pi=0.5/n, 则成功情况下的平均查找长度为:
17/62
假设所有不成功查找的情况为m种,它们的查找概率相同,即qi=0.5/m, 则不成功情况下的平均查找长度为:
合起来: 可以推出:顺序查找的时间复杂度为O(n)。
18/62
顺序查找总结 顺序查找的优点是算法简单,且对查找表的存储结构无特殊要求,无论 是用顺序表还是用链表来存放元素,也无论是元素之间是否按关键字有 序,它都同样适用。 顺序查找的缺点是查找效率低,因此,当n较大时不宜采用顺序查找。
19/62
1.折半查找算法
查找表R[0..n-1]为递增有序顺序表
简单比较方法
#顺序查找算法1
#从表头往后找 #未找到返回-1 #找到后返回其序号i
12/62
设置一个哨兵
关键字比较
def SeqSearch2(R,k): n=len(R) R.append(k) i=0 while R[i]!=k: i+=1
if i==n: return -1 else: return i
#顺序查找算法2
#末尾添加一个哨兵
#从表头往后找 #未找到返回-1 #找到后返回其序号i
说明 由于查找算法主要考虑关键字之间的比较,两个算法的效率差不多
13/62
2. 顺序查找算法分析
1)仅考虑查找成功的情况
第1个元素即R[0]=k,1次关键字比较。 第2个元素即R[1]=k,2次关键字比较。 以此类推,第n个元素即R[n-1]=k,n次关键字比较 共有n种查找成功的情况,在等概率时,pi=1/n。
6/62
查找表T:含有n个记录。
成功情况下(概率相等)的平均查找长度ASL成功是指找到T中任一记录平均 需要的关键字比较次数。

第九章 查找

第九章 查找

} // Search_Seq

例:在顺序查找表中查找key=8的关键字 ST.elem
0 8 1 100 2 10 3 0 4 8 i 5 1 6 3 7 7
查找成功 i=4
9.1.1 顺序表的查找性能分析

等概率下查找成功的平均查找长度:Pi=1/n;Ci=n-i+1,
1 ASLSS n
(n i 1)
9.1.2 有序表的查找的性能分析
•判定树:用二叉树描述折半查找过程,树中每个结点表示一个 记录,结点值为该记录在表中的位臵,结点所在的层次表示查找 该值需要进行的比较次数。则有如下的表:
位臵 0 1 2 3 4 5 6 7 8 9 10 11
05 13 19 21 37 56 64 75 80 88 92
} // Search_Seq

例:在顺序查找表中查找key=8的关键字 ST.elem
0 8 1 100 2 10 3 0 4 8 5 1 6 3 i 7 7
9.1.1 顺序表的查找

适用场合:以顺序表表示静态查找表,表内元素无序。
思想:从表中最后一条记录起,逐个比较记录关键字与给定值, 若相等查找成功;反之,直至与第一条记录不等,查找不成功 int Search_Seq( SSTable ST, KeyType key ) { ST.elem[0]. key = key;//哨兵 for ( i = ST.length ; ! EQ(ST.elem[i]. key, key ) ; - - i ); return i;
比较次数 0 3 4 2 3 4 1 3 4 2 3 4
查找的定义和术语(2)
“特定的”数据元素 关键字(Key):数据元素中某个数据项的值,用以标识一个 数据元素 主关键字(Primary Key):可以唯一标识一个记录的关键 字 次关键字(Secondary Key):用以识别若干记录的关键 字 查找(Searching):根据给定值,在查找表中确定一个其关 键字等于给定值的数据元素或记录. 查找成功(Searching Success):若存在这一记录,给 出该记录信息或指示该记录在表中的位臵 查找不成功(Searching Failed):若查找表中不存在这 一记录,给出“空记录”或“空指针”。

静态查找

静态查找
Pi为查找列表中第 个数据元素的概率 为查找列表中第i个数据元素的概率 Ci为找到列表中第 个数据元素时,已经进行过的关 为找到列表中第i个数据元素时 个数据元素时, 键字比较次数
查找的基本方法
基于线性表的查找法 ——顺序查找法、折半查找法、分块查找法 比较式查找法 基于树的查找法 —— ——二叉排序树、平衡二叉排序树、B树 B
顺序查找的算法
//不设置监视哨 int seqsearch(l, k) RecordList l; keytype k; { i=l.length; while(i>=1&&l.r[i].key!=k) i--; if(i>=1) return i; else return 0; }
监视哨: 监视哨:l.r[0],起 , 防止越界的作用
基本概念
关键字:数据元素的某个数据项的值。 关键字:数据元素的某个数据项的值。
主关键字: 主关键字:一个关键字可以唯一标识列表中的 一个元素 注意:如果数据元素只有一个数据项时, 注意:如果数据元素只有一个数据项时,数据 元素的值就是关键字
查找的基本概念
列表): (1)查找表 列表 :由同一类型的数据元素(或记录) )查找表(列表 由同一类型的数据元素(或记录) 构成的集合。 构成的集合。 如图的学生招生录取登记表。 如图的学生招生录取登记表。
数据元素( (5)关键字(Key)——数据元素(或记 )关键字( ) 数据元素 中某个数据项的值, 录)中某个数据项的值,用它可以标识数 据元素(或记录)。 据元素(或记录)。 (6)主关键字(Primary Key)——可以 )主关键字( ) 可以 唯一地标识一个记录的关键字称为主关键 如图的“学号” 字。如图的“学号”。
基本概念

数据结构(三十七)查找的基本概念

数据结构(三十七)查找的基本概念

数据结构(三⼗七)查找的基本概念 ⼀、查找的基本概念 1.查找(Searching):就是在由⼀组记录组成的集合中寻找关键字值等于给定值的某个记录,或是寻找属性值符合特定条件的某些记录。

若表中存在这样⼀个记录,则称查找是成功的,此时查找的结果给出整个记录的信息,或指⽰该记录在查找表中的位置。

若表中不存在关键字等于给定值的记录,则称查找不成功,此时查找的结果可以给出⼀个“空”记录或者“空”指针。

2.查找表(Search Table):是⼀种以同⼀类型的记录构成的集合为逻辑结构,以查找为核⼼运算的数据结构。

3.关键字(Key):是数据元素中某个数据项的值,⼜称为键值,⽤它可以标识⼀个数据元素,也可以标识⼀个记录的某个数据项(字段)。

4.主关键字(Primaty Key):可以惟⼀地标识⼀个记录的关键字。

对于那些可以标识多个数据元素(或记录)的关键字,称为次关键字(Secondary Key)。

⼆、查找表的分类 1.静态查找表(Static Search Table):只作查找操作的查找表。

主要操作有:查询某个“特定的”数据元素是否在查找表中检索某个“特定的”数据元素和各种属性。

2.动态查找表(Dynamic Search Table):动态表的特点是表结构本⾝是在查找过程中动态⽣成的。

同时在查找过程中同时插⼊查找表中不存在的数据元素,或者从查找表中删除已经存在的某个数据元素。

主要操作有:查找时插⼊数据元素查找时删除数据元素 三、静态表和动态表的代表 静态表:顺序查找、⼆分查找、插值查找、斐波那契查找、线性索引查找 动态表:⼆叉排序树、平衡⼆叉树、B树、散列表。

数据结构(八)查找

122
99
250
110
300
280
类C程序实现: void InsertBST(*&t,key) //在二叉排序树中插入查找关键字key { if(t= = NULL){ t=new BiTree; t->lchild=t->rchild=NULL; t->data=key; return; } if(key<t->data ) InsertBST(t->lchild,key); else InsertBST (t->rchild, key ); } void CreateBiTree(tree,d[ ],n) //n个数据在数组d中,tree为二叉排序树根 { tree=NULL; for(i=0;i<n;i++) InsertBST(tree,d[i]); }
p q
void delete(*&p) { if(p->rchild = = NULL) { q=p; p=p->lchild; delete q; } else if(p->lchild= =NULL) { q=p; p=p->rchild; delete q; } else { q=p; s=p->lchild; while(s->rchild!=NULL) {q=s; s=s->rchild;} p->data=s->data; if(q!=p) q->rchild=s->lchild; else q->lchild=s->lchild; } delete s; }
在xL中选值最大的代替x,该数据按二叉排序树的性质应在 最右边。
f x f s c

数据结构中的查找算法总结

数据结构中的查找算法总结静态查找是数据集合稳定不需要添加删除元素的查找包括:1. 顺序查找2. 折半查找3. Fibonacci4. 分块查找静态查找可以⽤线性表结构组织数据,这样可以使⽤顺序查找算法,再对关键字进⾏排序就可以使⽤折半查找或斐波那契查找等算法提⾼查找效率,平均查找长度:折半查找最⼩,分块次之,顺序查找最⼤。

顺序查找对有序⽆序表均适⽤,折半查找适⽤于有序表,分块查找要求表中元素是块与块之间的记录按关键字有序动态查找是数据集合需要添加删除元素的查找包括: 1. ⼆叉排序树 2. 平衡⼆叉树 3. 散列表 顺序查找适合于存储结构为顺序存储或链接存储的线性表。

顺序查找属于⽆序查找算法。

从数据结构线形表的⼀端开始,顺序扫描,依次将扫描到的结点关键字与给定值k相⽐较,若相等则表⽰查找成功 查找成功时的平均查找长度为: ASL = 1/n(1+2+3+…+n) = (n+1)/2 ; 顺序查找的时间复杂度为O(n)。

元素必须是有序的,如果是⽆序的则要先进⾏排序操作。

⼆分查找即折半查找,属于有序查找算法。

⽤给定值value与中间结点mid的关键字⽐较,若相等则查找成功;若不相等,再根据value 与该中间结点关键字的⽐较结果确定下⼀步查找的⼦表 将数组的查找过程绘制成⼀棵⼆叉树排序树,如果查找的关键字不是中间记录的话,折半查找等于是把静态有序查找表分成了两棵⼦树,即查找结果只需要找其中的⼀半数据记录即可,等于⼯作量少了⼀半,然后继续折半查找,效率⾼。

根据⼆叉树的性质,具有n个结点的完全⼆叉树的深度为[log2n]+1。

尽管折半查找判定⼆叉树并不是完全⼆叉树,但同样相同的推导可以得出,最坏情况是查找到关键字或查找失败的次数为[log2n]+1,最好的情况是1次。

时间复杂度为O(log2n); 折半计算mid的公式 mid = (low+high)/2;if(a[mid]==value)return mid;if(a[mid]>value)high = mid-1;if(a[mid]<value)low = mid+1; 折半查找判定数中的结点都是查找成功的情况,将每个结点的空指针指向⼀个实际上不存在的结点——外结点,所有外界点都是查找不成功的情况,如图所⽰。

第9章查找


high指向待查元素所 在区间的上界
(1) low =1,high =11 ,mid =6 ,待查范围是 [1,11]; (2) 若 ST.elem[mid].key < key,说明 key[ mid+1,high] , 则令:low =mid+1;重算 mid= (low+high)/2;. (3) 若 ST.elem[mid].key > key,说明key[low ,mid-1], 则令:high =mid–1;重算 mid ; (4)若 ST.elem[ mid ].key = key,说明查找成功,元素序号=mid; 结束条件: (1)查找成功 : ST.elem[mid].key = key (2)查找不成功 :high<low (意即区间长度小于0)
2013-12-24
2
2、对查找表常用的操作:
查询某个“特定的”数据元素是否在表中; 查询某个“特定的”数据元素的各种属性; 在查找表中插入一元素; 从查找表中删除一元素。
静态查找表(Static Search Table):对查找表只做 前两种“查找”操作 动态查找表(Dynamic Search Table) :对查找表 要进行后两种“查找”操作
2013-12-24
8 75 i
9 80 i
10 88 i
11 92 i
比较次数=5
6
不设置监视哨的顺序查找算法
int SeqSearch( SSTable ST, KeyType key) /*不用监视哨法,在顺序表中查找关键字等于key的元素*/ {
i=ST.length;
while (i>=1&&ST. elem[i].key!=key) i--;

查找-数据结构


平均查找长度:为确定记录在查找表中 的位置,需和给定值进行比较的关键字 个数的期望值称为查找算法在查找成功 时的平均查找长度,简称ASL。
对于含有n个记录的表,查找成功时的平 均查找长度为: n ASL PiCi i 1
其找到中表:中Pi为其查关找键表字中与第给i定个值记相录等的的概第率,i个C记i为 录时和给定值已进行过比较的关键字个数。
(1)若*p 为叶子结点,直接删除即可。
45
45
12
3
37
53
f
100
24
p
61
60
90
12
53
3
删除24
f->lchild = null; delete p;
37
100
61
60
90
78
78
(2)若*p结点只有左子树PL或只有右子树PR,此 时只要令PL或PR直接成为*f的左子树即可
f
F
f
F
p
P
p
二叉排序树的插入
基本思想:
若二叉排序树为空,则待插结点作为根结点插入 到空树中;
若待插结点的关键字值和根结点的关键字值相等, 则说明树中已有此结点,无需插入;
若待插结点的关键字值小于根结点的关键字值, 则将待插结点插入到根的左子树中;
若待插结点的关键字值大于根结点的关键字值, 则将待插结点插入到根的右子树中;
mid low
mid low
mid low
mid low
mid
mid
mid
mid
6
3
9
1
47
10
2
58
11
由此可见,二分查找过程恰好是走了一条从判 定树的根到被查结点的路径,比较的关键字个 数恰为该结点在判定树中的层数。
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
相关文档
最新文档