数据结构查找.ppt
《数据结构查找.ppt》由会员分享,可在线阅读,更多相关《数据结构查找.ppt(97页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、第第9章章查找查找1查找表查找表(SearchTable):是由同一类型的数据元素(或记录)构成的集合。是由同一类型的数据元素(或记录)构成的集合。前面已介绍了各种线性或非线性的数据结构,本章讨论另一种在前面已介绍了各种线性或非线性的数据结构,本章讨论另一种在实际应用中大量使用的数据结构实际应用中大量使用的数据结构-查找表。查找表。由于由于“集合集合”中的数据元素之间存在着完全松散的关系,因此中的数据元素之间存在着完全松散的关系,因此查找表是一种非常灵便的数据结构。查找表是一种非常灵便的数据结构。2对查找表经常进行的操作:对查找表经常进行的操作:(1)查询某个)查询某个“特定的特定的”数据元素
2、是否在查找表中。数据元素是否在查找表中。(2)检索某个)检索某个“特定的特定的”数据元素的各种属性。数据元素的各种属性。(3)在查找表中插入一个数据元素。)在查找表中插入一个数据元素。(4)从查找表中删去某个数据元素。)从查找表中删去某个数据元素。3查找表可分为两类:查找表可分为两类:若对查找表只作若对查找表只作查询查询和和检索检索操作,则称此类查找表为静态查找表操作,则称此类查找表为静态查找表(StaticSearchTable)。若在查找过程中同时若在查找过程中同时插入插入查找表中不存在的数据元素,或者从查找表查找表中不存在的数据元素,或者从查找表中中删除删除已存在的某个数据元素,则称此类
3、查找表为动态查找表(已存在的某个数据元素,则称此类查找表为动态查找表(DynamicSearchTable)。)。4在各种系统软件或应用软件中,查找表是最常见的结构之一。如编译程序在各种系统软件或应用软件中,查找表是最常见的结构之一。如编译程序中符号表、信息处理系统中信息表等。中符号表、信息处理系统中信息表等。综上所述,所谓综上所述,所谓“查找查找”即为在一个含有众多的数据元素(或记录)的查即为在一个含有众多的数据元素(或记录)的查找表中找出某个找表中找出某个“特定的特定的”数据元素(或记录)。数据元素(或记录)。关于关于“特定的特定的”词的具体含义:词的具体含义:关键字(关键字(Key):)
4、:是数据元素(或记录)中某个数据项的值,用它可以标识一个数据元素(或是数据元素(或记录)中某个数据项的值,用它可以标识一个数据元素(或记录)。记录)。主关键字(主关键字(PrimaryKey):):若此关键字可以惟一地标识一个记录,则称此关键字为主关键字。若此关键字可以惟一地标识一个记录,则称此关键字为主关键字。对不同的记录,其主关键字均不同。对不同的记录,其主关键字均不同。5次关键字(次关键字(SecondaryKey):):用以识别若干记录的关键字为次关键字。用以识别若干记录的关键字为次关键字。当数据元素只有一个数据项时,其关键字即为该数据元素的值。当数据元素只有一个数据项时,其关键字即为
5、该数据元素的值。查找(查找(Searching):根据给定的某个值,在查找表中确定一个其关键字等于给定值的数据元素根据给定的某个值,在查找表中确定一个其关键字等于给定值的数据元素(或记录)。(或记录)。查找成功:查找成功:若表中存在这样的一个记录,则查找成功,此时查找的结果为给出整个记若表中存在这样的一个记录,则查找成功,此时查找的结果为给出整个记录的信息,或指示该记录在查找表中的位置。录的信息,或指示该记录在查找表中的位置。查找不成功:查找不成功:若表中不存在关键字等于给定值的记录,则查找不成功,此时查找的结果若表中不存在关键字等于给定值的记录,则查找不成功,此时查找的结果可给出一个可给出一
6、个“空空”记录或记录或“空空”指针。指针。6此表为一个查找表。此表为一个查找表。表中每一行为一个记录,学生的学号为记录的关键字。表中每一行为一个记录,学生的学号为记录的关键字。若给定值为若给定值为20010985,则通过查找可得学生王五的各项信息。此时查找是成功的。,则通过查找可得学生王五的各项信息。此时查找是成功的。若给定值为若给定值为20011930,则由于表中没有关键字为,则由于表中没有关键字为20011930的记录,则查找不成功。的记录,则查找不成功。学号学号姓名姓名性别性别入学总分入学总分录取专业录取专业 20010983张三张三女女438计算机计算机20010984李四李四男男43
7、0计算机计算机20010985王五王五女女445计算机计算机 20010998张三张三男男458计算机计算机 招生录取登记表招生录取登记表例:例:7如何进行查找?如何进行查找?在一个结构中查找某个数据元素的过程依赖于这个数据元素在结构中所处在一个结构中查找某个数据元素的过程依赖于这个数据元素在结构中所处的地位。的地位。即:对查找表进行查找的方法取决于表中数据元素依何种关系组织在一起。即:对查找表进行查找的方法取决于表中数据元素依何种关系组织在一起。(这个关系是人为加上的。因为查找表中数据元素之间原本仅存在(这个关系是人为加上的。因为查找表中数据元素之间原本仅存在“同属于一同属于一个集合个集合”
8、的松散关系)。的松散关系)。例:查英文单词。例:查英文单词。字典是按单词的字母在字母表中的次序编排的,则查找时不需要从字典字典是按单词的字母在字母表中的次序编排的,则查找时不需要从字典中第一个单词比较起,中第一个单词比较起,而只要根据待查单词中每个字母在字母表中的位置查而只要根据待查单词中每个字母在字母表中的位置查到该单词。到该单词。字典这种查找表的数据元素之间原本仅存在着字典这种查找表的数据元素之间原本仅存在着“同属于一个集合同属于一个集合”的松的松散散关系,给查找带来不便。关系,给查找带来不便。对字典按单词的字母在字母表中的次序进行编排,就是对字典这种查找对字典按单词的字母在字母表中的次序
9、进行编排,就是对字典这种查找表人为加上的一种关系,以便按某种规则进行查找。表人为加上的一种关系,以便按某种规则进行查找。8总之:总之:查找的方法取决于查找表的结构。查找的方法取决于查找表的结构。由于查找表中的数据元素之间不存在明显的组织规律,由于查找表中的数据元素之间不存在明显的组织规律,因此不便因此不便于查找。于查找。为了提高查找的效率,为了提高查找的效率,需要在查找表中的元素之间人为地附加某需要在查找表中的元素之间人为地附加某种确定的关系,换句话说,种确定的关系,换句话说,用另外一种结构来表示查找表。用另外一种结构来表示查找表。9内查找和外查找:内查找和外查找:若整个查找过程全部在内存进行
10、,则称为内查找;若在查找过程若整个查找过程全部在内存进行,则称为内查找;若在查找过程中还需要访问外存,则称为外查找。本书仅介绍内查找。中还需要访问外存,则称为外查找。本书仅介绍内查找。平均查找长度平均查找长度ASL:查找算法的效率,主要看要查找的值与关键字的比较次数,通常查找算法的效率,主要看要查找的值与关键字的比较次数,通常用平均查找长度来衡量。用平均查找长度来衡量。10 对一个含对一个含n n个数据元素的表,查找成功时:个数据元素的表,查找成功时:其中:其中:P Pi i为找到表中第为找到表中第i i个数据元素的概率,且有:个数据元素的概率,且有:C Ci i为为查查找找表表中中第第i i
11、个个数数据据元元素素所所用用到到的的比比较较次次数数。不不同同的的查查找找方法有不同的方法有不同的C Ci i 。查查找找是是许许多多程程序序中中最最消消耗耗时时间间的的一一部部分分。因因而而,一一个个好好的的查查找找方法会大大提高运行速度。方法会大大提高运行速度。119.1 静态查找表静态查找表9.2动态查找表动态查找表9.3 哈希表哈希表本章内容:本章内容:129.1 静态查找表静态查找表131.1.顺序表的查找顺序表的查找 静态查找表的存储结构可用顺序表或线性链表表示。静态查找表的存储结构可用顺序表或线性链表表示。本节只讨论在顺序存储结构中查找的实现。本节只讨论在顺序存储结构中查找的实现
12、。顺序查找的基本思想:顺序查找的基本思想:从表中最后一个记录开始,逐个进行记录的关键字和给定值从表中最后一个记录开始,逐个进行记录的关键字和给定值的比较,若某个记录的关键字和给定值比较相等,则查找成功,的比较,若某个记录的关键字和给定值比较相等,则查找成功,找到所查记录;反之,若直至第一个记录,其关键字和给定值比找到所查记录;反之,若直至第一个记录,其关键字和给定值比较都不等,则表明表中没有所查记录,查找不成功。较都不等,则表明表中没有所查记录,查找不成功。14i例例 012 34567891011 513192137566475808892找找6464监视哨监视哨iiii比较次数比较次数=5
13、 比较次数:比较次数:查找第查找第n个元素:个元素:1查找第查找第n-1个元素:个元素:2.查找第查找第1个元素:个元素:n查找第查找第i个元素:个元素:n-i+1查找失败查找失败:n+115例 01234567891011 513192137566475808892找找6464监视哨监视哨#defineM500typedefstructintkey;floatinfo;JD;intseqsrch(JDr,intn,intk)inti=n;r0.key=k;while(ri.key!=k)i-;return(i);16监测哨的作用:监测哨的作用:(1)省去判定循环中下标越界的条件,从而节约比较
14、时间。)省去判定循环中下标越界的条件,从而节约比较时间。(2)保存查找值的副本,查找时若遇到它,则表示查找不成功。这样在从后向)保存查找值的副本,查找时若遇到它,则表示查找不成功。这样在从后向前查找失败时,不必判断查找表是否检测完,从而达到算法统一。前查找失败时,不必判断查找表是否检测完,从而达到算法统一。上述算法中,对于有上述算法中,对于有n 个数据元素的表,给定值个数据元素的表,给定值k与表中第与表中第i 个元素的关键个元素的关键字相等,即定位第字相等,即定位第i 个记录时,需进行:个记录时,需进行:n i+1次关键字比较,即次关键字比较,即Ci=n i+1。则查找成功时,顺序查找的平均查
15、找长度为:则查找成功时,顺序查找的平均查找长度为:顺序查找性能分析:顺序查找性能分析:对一个含有对一个含有n 个数据元素的表,查找成功时有:个数据元素的表,查找成功时有:17设每个数据元素的查找概率相等,即设每个数据元素的查找概率相等,即Pi=,则等概率情况下有:,则等概率情况下有:查找不成功时,关键字的比较次数总是查找不成功时,关键字的比较次数总是n+1次。次。算法中的基本工作就是关键字的比较,因此,查找长度的量级就是查算法中的基本工作就是关键字的比较,因此,查找长度的量级就是查找算法的时间复杂度为找算法的时间复杂度为O(n)。顺序查找缺点是当顺序查找缺点是当n很大时,平均查找长度较大,效率
16、低;优点是对很大时,平均查找长度较大,效率低;优点是对表中数据元素的存储没有特殊要求。表中数据元素的存储没有特殊要求。182.2.有序表的查找有序表的查找以有序表表示静态查找表时,可用折半查找法来实现查找。以有序表表示静态查找表时,可用折半查找法来实现查找。折半查找的基本思想:折半查找的基本思想:在在有有序序表表中中,取取中中间间元元素素作作为为比比较较对对象象,若若给给定定值值与与中中间间元元素素的的关关键键字字相相等等,则则查查找找成成功功;若若给给定定值值小小于于中中间间元元素素的的关关键键字字,则则在在中中间间元元素素的的左左半半区区继继续续查查找找;若若给给定定值值大大于于中中间间元
17、元素素的的关关键键字字,则则在在中中间间元元素素的的右右半半区区继继续续查查找找。不不断断重重复复上上述述查查找找过过程程,直直到到查查找找成成功功,或所查找的区域无数据元素,查找失败。或所查找的区域无数据元素,查找失败。折半查找也叫二分查找,是一种效率较高的查找方法,但前提是折半查找也叫二分查找,是一种效率较高的查找方法,但前提是表中元素必须按关键字有序(按关键字递增或递减)排列。表中元素必须按关键字有序(按关键字递增或递减)排列。19算法实现:算法实现:设表长为设表长为n,low,high和和mid分别指向待查元素所在区间的上界、下界分别指向待查元素所在区间的上界、下界和中点和中点,k为给
18、定值为给定值。初始时,令初始时,令low=1,high=n,mid=(low+high)/2 让让k与与mid指向的记录比较指向的记录比较:若若k=rmid.key,则,则查找成功查找成功若若krmid.key,则则low=mid+1重复上述操作,直至重复上述操作,直至lowhigh时,查找失败时,查找失败20算法描述:算法描述:lowhighmid例例 1 2 3 4 5 6 7 8 9 10 115 13 19 21 37 56 64 75 80 88 92找211 2 3 4 5 6 7 8 9 10 115 13 19 21 37 56 64 75 80 88 92lowhighmid
19、1 2 3 4 5 6 7 8 9 10 115 13 19 21 37 56 64 75 80 88 92lowhighmid21例例1 2 3 4 5 6 7 8 9 10 115 13 19 21 37 56 64 75 80 88 92lowhighmid找701 2 3 4 5 6 7 8 9 10 115 13 19 21 37 56 64 75 80 88 92lowhighmid1 2 3 4 5 6 7 8 9 10 115 13 19 21 37 56 64 75 80 88 92low highmid1 2 3 4 5 6 7 8 9 10 115 13 19 21 37
20、 56 64 75 80 88 92lowhighmid221 2 3 4 5 6 7 8 9 10 115 13 19 21 37 56 64 75 80 88 92lowhighintbinsrch(JDr,intn,intk)intlow,high,mid,found;low=1;high=n;found=0;/found为找到标志。值为为找到标志。值为0表示未找到。表示未找到。while(lowrmid.key)low=mid+1;elseif(k=rmid.key)found=1;elsehigh=mid-1;if(found=1)/如果已找到如果已找到return(mid);/找到
21、的记录的下标肯定为找到的记录的下标肯定为midelsereturn(0);#defineM500typedefstructintkey;floatinfo;JD;23折半查找的性能分析:折半查找的性能分析:从折半查找的过程看,每次查找都是以表的中点为比较对象,并以中从折半查找的过程看,每次查找都是以表的中点为比较对象,并以中点将表分割为两个子表,对定位到的子表继续作同样的操作。所以,对表点将表分割为两个子表,对定位到的子表继续作同样的操作。所以,对表中每个数据元素的查找过程,可用二叉树来描述,称这个描述查找过程的中每个数据元素的查找过程,可用二叉树来描述,称这个描述查找过程的二叉树称为判定树。
22、二叉树称为判定树。判定树中每一结点对应表中一个记录,但结点值不是某个记录的关键判定树中每一结点对应表中一个记录,但结点值不是某个记录的关键字,而是某个记录在表中的位置序号。根结点对应当前区间的字,而是某个记录在表中的位置序号。根结点对应当前区间的中间记录中间记录,左子树对应前一子表,右子树对应后一子表。左子树对应前一子表,右子树对应后一子表。241185210741936判定树:1 2 3 4 5 6 7 8 9 10 115 13 19 21 37 56 64 75 80 88 92从上面判定树可看到,查找第一层的根结点从上面判定树可看到,查找第一层的根结点56,一次比较即可找,一次比较即可
23、找到;到;查找第二层的结点查找第二层的结点19和和80,二次比较即可找到;二次比较即可找到;查找第三层的查找第三层的结点结点5、21、64、88,三次比较即可找到;查找第四层的结点,三次比较即可找到;查找第四层的结点13,37、75、92,四次比较即可找到。,四次比较即可找到。25n个结点的判定树,树高为个结点的判定树,树高为k,则有,则有2k-1-1n2k-1,即,即k-1di.key)&(i=b)/确定要比较的值确定要比较的值k在哪一块在哪一块i+;/kb)printf(nNotfound);return(0);j=di.link;/要比较的值要比较的值k在以在以di.link为起点下标的
24、块中为起点下标的块中while(jn)&(k!=rj.key)&(rj.keydata.key)p=T;returnTRUE;/查找成功查找成功elseif(LT(key,T-data.key)SearchBST(T-lchild,key,T,p);/在左子树中继续查找在左子树中继续查找elseSearchBST(T-rchild,key,T,p);/在右子树中继续查找在右子树中继续查找4230201040352523fT设 key=48fTfT22pfTfTTTTfffp43二叉排序树的查找分析:二叉排序树的查找分析:在二叉排序树上查找其关键字等于给定值结点的过程,恰是走了一条在二叉排序树上
25、查找其关键字等于给定值结点的过程,恰是走了一条从根结点到该结点的路径的过程。从根结点到该结点的路径的过程。含有含有n个结点的二叉树是不唯一的,个结点的二叉树是不唯一的,如如何来进行查找分析呢?何来进行查找分析呢?44例如:上图两棵二叉排序树中,结点的个数和值均相同。例如:上图两棵二叉排序树中,结点的个数和值均相同。但(但(a)的深度)的深度为为3,而(,而(b)的深度为)的深度为6。其等概率平均查找长度分别为:其等概率平均查找长度分别为:ASL(a)=(1*1+2*2+3*3)/6=14/6ASL(b)=(1*1+2*1+3*1+4*1+5*1+6*1)/6=21/6因此,二叉排序树的平均查找
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 数据结构 查找
限制150内