数据结构C语言版(严蔚敏版)第9章查找最新PPT课件
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
//若查找成功,返回该记录的位置下标序号, 否则返回0
i=1;
while (i<=n && ST[i].key != key) i++;
if (i<=n) retrun i;
else return 0; 0 1 2 3 4 5 6 7
}
10 20 40 80 30 60 25
(ቤተ መጻሕፍቲ ባይዱ) 初态
012 3 4 567
查找:在数据元素集合中查找满足某种条 件的数据元素的过程称为查找。最简单且最常 用的查找条件是“ 关键字值等于某个给定值 ” ,在查找表搜索关键字等于给定值的数据元素 (或记录)。若表中存在这样的记录,则称 查 找成功 ,此时的查找结果应给出找到记录的全 部信息或指示找到记录的存储位置;若表中不 存在关键字等于给定值的记录,则称 查找不成 功,此时查找的结果可以给出一个空记录或空 指针。若按主关键字查找,查找结果是唯一的 ;若按次关键字查找,结果可能是多个记录, 即结果可能不唯一。
查找表的存储结构:查找表是一种非常灵活的 数据结构,对于不同的存储结构,其查找方法 不同。为了提高查找速度,有时会采用一些特 殊的存储结构。本章将介绍以 线性结构、树型 结构及哈希表结构 为存储结构的各种查找算法 。
查找算法的时间效率 :查找过程的主要操作 是关键字的比较,所以通常以“ 平均比较次数 ”来衡量查找算法的时间效率。
float info;
其他
}SSTable[ MAX_NUM],SSItem ;
信息
假设在查找表中,数据元素个数为 n( n<MAX_NUM),并分别存放在数组的下标变 量ST[1]~ST[n]中。 下面我们给出顺序查找的完整算法。
int seq_search (SSTable ST,int key) {//在顺序表中查找关键字值等于key的记录,
while(ST[i].key!=key) i- -; /*从表尾往前查*/找到:返回元素
return i; }
0 1 2 3 4 在线5 性表6 中的7 存 10 20 40 80 储3位0 置;60 25
(a) 初态 未找到:返回0。
012 3 4 567
80 10 20 40 80 30 60 25
9.1 静态查找表
9.1.1. 顺序查找(线性查找) 静态查找是指在静态查找表上进行的查找
操作,在查找表中查找满足条件的数据元素的 存储位置或各种属性。本节将讨论以线性结构 表示的静态查找表及相应的查找算法。
顺序查找的基本思想: 顺序查找是一种最简单的查找方法。其基本
思想是将查找表作为一个线性表,可以是顺序 表,也可以是链表,依次用查找条件中给定的 值与查找表中数据元素的关键字值进行比较, 若某个记录的关键字值与给定值相等,则查找 成功,返回该记录的存储位置,反之,若直到 最后一个记录,其关键字值与给定值均不相等 ,则查找失败,返回查找失败标志。
10 20 40 80 30 60 25 (b) K=80 (return i=4)
改进的顺序查找的算法:
int Search_seq(SSTable ST, int n, int key) { int i=n; ST[0].key=key;
使用了监视哨, 在查找过程中, 不用每一步都去 判断是否查找结 束。
监视哨
(b) K=80 (return i=4)
012 3 4 567
90 10 20 40 80 30 60 25
(c) K=90 (return i=0 )
根据上述算法可知: 查找成功时的平均查找次数为:
ASL=(1+2+3+4+……+n)/n=(n+1)/2 查找不成功时的比较次数为: n+1 则顺序查找的平均查找长度为:
查找过程:
对给定的一关键字 K,从线性表的一端开始,逐个进 行记录的关键字和 K的比较,直到找到关键字等于 K的记 录或到达表的另一端。
·可以采用从前向后查,也可采用从后向前查的方法。 · 在平均情况下,大约要与表中一半以上元素进行比较 效率较低。平均查找长度较大。 · 在下面两种情况下只能采取顺序查找:
10
65
865
第9章 查找
学习提要
本章中介绍下列主要内容: 静态查找表及查找算法:顺序查找、折半查找 动态查找表及查找算法:二叉排序树 哈希表及查找算法
学习提要(具体来讲) 1.熟练掌握顺序表和有序表的查找方法。 2.熟练掌握二叉排序树的构造和查找方法。 3.掌握二叉平衡树的维护平衡方法。 4.理解树的特点以及它们的建树过程。 5.熟练掌握哈希表的构造方法,深刻理解哈 希表与其它结构的表的实质性的差别。 6.掌握描述查找过程的判定树的构造方法, 以及按定义计算各种查找方法在等概率情况下 查找成功时的平均查找长度。
动态查找表: 若在查找过程中可以将查找
表中不存在的 数据元素插入 ,或者从查找表中 删除某个数据元素 ,则称这类查找表为 动态查 找表 。动态查找表在查找过程中查找表可能会 发生变化。对动态查找表进行的查找操作称为 动态查找。
关键字: 是数据元素中的某个数据项。唯
一能标识数据元素(或记录)的关键字,即每 个元素的关键字值互不相同,我们称这种关键 字为主关键字 ;若查找表中某些元素的关键字 值相同,称这种关键字为 次关键字 。例如,银 行帐户中的帐号是主关键字,而姓名是次关键 字。
a. 线性表为无序表(元素排列是无序的); b. 即使是有序线性表,但采用的是链式存储结构。
(1)顺序查找 (线性表在顺序存储结构下的顺序查找)
数据结构:
#define MAX_NUM 100
typedef struct{ int key;
//用于定义表的长度
每个结点包含两部分 内容:Key 和info
ASL==((n+1)/2+n+1)/2=(n+1)3/4 顺序查找的优点: 算法简单,无需排序,采用顺序
基本概念
查找表 用于查找的数据元素集合称为查找 表。查找表由同一类型的数据元素(或记录) 构成。
静态查找表 若只对查找表进行如下两种操 作:(1)在查找表中查看某个特定的数据元素 是否在查找表中,(2)检索某个特定元素的各 种属性,则称这类查找表为静态查找表。静态 查找表在查找过程中查找表本身不发生变化。 对静态查找表进行的查找操作称为静态查找。