数据结构查找PPT课件
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
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
作用:
//不要用for(i=n; i>0; - -i) 或 for(i=1; i<=n; i++)
无需
return i; //若到达0号单元才结束循环,说明不成功,返回0值
(i=0)。成功时则返回找到的那个元素的位置i。
} /1/5S.0e6.a20r2c0h_Seq
选单择元0当处作理. 监比视较哨麻,烦因,为不在小数心组就里出面错0
统计意义上的
第九章 查找
由于查找运算的使用效率很高,几乎在任意一个计算 机系统软件和应用软件中都会涉及到,所以当问题所涉及 的数据量相当大时,查找方法的效率就显得格外重要。
在一些实事查询系统中尤其如此。因此,本章将系统 地讨论各种查找方法,并通过对它们的效率分析来比较各 种查找方法的优劣。
15.06.2020
1
.
第九章 查找
9.1 静态查找表 9.2 动态查找表 9.3 哈希表
15.06.2020
2
.
查找的基本概念
➢ 查找又称为查询或检索,是在一批记录中依照某个域 的指定域值,找出相应的记录的操作。
➢ 在计算机中,被查找的数据对象是由同一类型的记录 构成的集合,可称之为查找表(search table)。
➢ 查找算法中的基本运算是记录的关键字与给定值所进行的 比较,其执行时间通常取决于比较的次数。因此,通常以 关键字与给定值进行比较的记录个数的平均值,作为衡量 查找算法好坏的依据。
15.06.2020
4
.
查找表操作及分类
➢ 操作:
(1)查询某个“特定的”数据元素是否在查找表中;
(2)某个“特定的”数据元素的各种属性;
} ADT StaticSearchTable
15.06.2020
6
.
一、顺序查找
在表的组织方式中,线性表是最简单的一种。顺序查找 是一种最简单的查找方式。
➢ 顺序查找的基本思想是:
从线性表的一端开始,依次将扫描到得结点关键字和给定值K相比较。 若当前扫描到得结点关键字与K相等,则查找成功;若扫描结束后,仍未 找到关键字等于K的结点,则查找失败。
➢ 抽象数据类型静态查找表的定义: ADT StaticSearchTable{ 数据对象D: D是具有相同属性的数据 元素的集合。 数据关系R:数据元素同属一个集合。 基本操作P: Create(&ST,n); Destroy(&ST);
Search(ST,key);Traverse(ST,Visit());
};
每个结点包含两部分 内容:Key 和info
其他 信息
15.06.2020
8
.
(2)算法的实现:
技巧:把待查关键字key存入表头或表尾(俗称“哨兵”), 这样可以加快执行速度。
例: 若将待查找的特定值key存入顺序表的首部(如0号单
元),则顺序查找的实现方案为:从后向前逐个比较!
int Search_Seq( SSTable ST , KeyType key ){
(3)在查找表中插入一个数据元素;
(4)从查找表中删去某个数据元素。
➢ 分类:
若对查找表只作(1)和(2)两种操作,则称此类查找表为静 态查找表。
若在查找过程中同时插入查找表中不存在的数据元素,或 者从查找表中删除已存在的某个数据元素,则称此类查找表 为动态查找表。
15.06.2020
5
.
9.1 静态查找表
➢ 在实际应用问题中,每个记录一般包含有多个数据域, 查找是根据其中某一个指定的域进行的,这个作为查 找依据的域称为关键字(key)。
15.06.2020
3
.
➢ 对于给定的关键字的值,如果在表中经过查找能找到相应 的记录,则称查找成功,一般可输出该记录的有关信息或 指示该记录在查找表中的位置。若表中不存在相应的记录, 则称查找不成功,此时应该给出不成功的信息。
判断 是否 越界.
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)
}
找到:返回元素在线
(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.20ຫໍສະໝຸດ Baidu0
90 10 20 40 80 30 60 25
.
10
(c) K=90 (return i=0 )
讨论① 查找效率怎样计算?
——用平均查找长度ASL衡量。
平均查找长度: 为确定记录在查找表中的位置,需和给定值进行比较的
关键字个数的期望值称为查找算法在查找成功时的平均查 找长度(Average Search Length)。
15.06.2020
.
11
平均查找长度(ASL:average search length)。
//在顺序表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;