数据结构第八章查找.ppt
《数据结构第八章查找.ppt》由会员分享,可在线阅读,更多相关《数据结构第八章查找.ppt(73页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、数据结构课件第八章查找数据结构课件第八章查找现在学习的是第1页,共73页7.1 基本概念基本概念7.2 静态查找静态查找7.3 动态查找动态查找7.4 哈希表哈希表7.5 应用举例应用举例现在学习的是第2页,共73页7.1 基本概念基本概念查找表查找表用于查找的数据元素集合称为查找表。查找表用于查找的数据元素集合称为查找表。查找表由同一类型的数据元素(或记录)构成。由同一类型的数据元素(或记录)构成。静态查找表静态查找表若只对查找表进行如下两种操作:若只对查找表进行如下两种操作:(1)在查找表中查看某个特定的数据元素是否在查找表中,)在查找表中查看某个特定的数据元素是否在查找表中,(2)检索某
2、个特定元素的各种属性,则称这类查找表为)检索某个特定元素的各种属性,则称这类查找表为静静态查找表态查找表。静态查找表在查找过程中查找表本身不发生变。静态查找表在查找过程中查找表本身不发生变化。对静态查找表进行的查找操作称为化。对静态查找表进行的查找操作称为静态查找静态查找。现在学习的是第3页,共73页动态查找表动态查找表若在查找过程中可以将查找表中不存在若在查找过程中可以将查找表中不存在的数据元素插入,或者从查找表中删除某个数据元素,的数据元素插入,或者从查找表中删除某个数据元素,则称这类查找表为则称这类查找表为动态查找表动态查找表。动态查找表在查找过。动态查找表在查找过程中查找表可能会发生变
3、化。对动态查找表进行的查程中查找表可能会发生变化。对动态查找表进行的查找操作称为找操作称为动态查找动态查找。关键字关键字是数据元素中的某个数据项。唯一能标识是数据元素中的某个数据项。唯一能标识数据元素(或记录)的关键字,即每个元素的关键字数据元素(或记录)的关键字,即每个元素的关键字值互不相同,我们称这种关键字为值互不相同,我们称这种关键字为主关键字主关键字;若查找;若查找表中某些元素的关键字值相同,称这种关键字为表中某些元素的关键字值相同,称这种关键字为次关次关键字键字。例如,银行帐户中的帐号是主关键字,而姓名。例如,银行帐户中的帐号是主关键字,而姓名是次关键字。是次关键字。现在学习的是第4
4、页,共73页查找查找在数据元素集合中查找满足某种条件的数据在数据元素集合中查找满足某种条件的数据元素的过程称为元素的过程称为查找查找。最简单且最常用的查找条件是。最简单且最常用的查找条件是“关键字值等于某个给定值关键字值等于某个给定值”,在查找表搜索关键字,在查找表搜索关键字等于给定值的数据元素(或记录)。若表中存在这样等于给定值的数据元素(或记录)。若表中存在这样的记录,则称的记录,则称查找成功查找成功,此时的查找结果应给出找到,此时的查找结果应给出找到记录的全部信息或指示找到记录的存储位置;若表中记录的全部信息或指示找到记录的存储位置;若表中不存在关键字等于给定值的记录,则称不存在关键字等
5、于给定值的记录,则称查找不成功查找不成功,此时查找的结果可以给出一个空记录或空指针。若按此时查找的结果可以给出一个空记录或空指针。若按主关键字查找,查找结果是唯一的;若按次关键字查主关键字查找,查找结果是唯一的;若按次关键字查找,结果可能是多个记录,即结果可能不唯一。找,结果可能是多个记录,即结果可能不唯一。现在学习的是第5页,共73页查找表的存储结构查找表的存储结构查找表是一种非常灵活的数据查找表是一种非常灵活的数据结构,对于不同的存储结构,其查找方法不同。为了结构,对于不同的存储结构,其查找方法不同。为了提高查找速度,有时会采用一些特殊的存储结构。本提高查找速度,有时会采用一些特殊的存储结
6、构。本章将介绍以线性结构、树型结构及哈希表结构为存储章将介绍以线性结构、树型结构及哈希表结构为存储结构的各种查找算法。结构的各种查找算法。查找算法的时间效率查找算法的时间效率查找过程的主要操作是关键查找过程的主要操作是关键字的比较,所以通常以字的比较,所以通常以“平均比较次数平均比较次数”来衡量查找来衡量查找算法的时间效率。算法的时间效率。现在学习的是第6页,共73页查找查找也叫检索,是根据给定的某个值,在表中确定一也叫检索,是根据给定的某个值,在表中确定一个关键字等于给定值的记录或数据元素个关键字等于给定值的记录或数据元素关键字关键字是数据元素中某个数据项的值,它可以标识一是数据元素中某个数
7、据项的值,它可以标识一个数据元素个数据元素查找方法评价查找方法评价查找速度查找速度占用存储空间多少占用存储空间多少算法本身复杂程度算法本身复杂程度平均查找长度平均查找长度ASL(Average Search Length)ASL(Average Search Length):为确定记:为确定记录在表中的位置,需和给定值进行比较的关键字的个录在表中的位置,需和给定值进行比较的关键字的个数的期望值叫查找算法的数的期望值叫查找算法的 现在学习的是第7页,共73页7.2 静态查找静态查找正如本章第一节所述:静态查找是指在静态查找正如本章第一节所述:静态查找是指在静态查找表上进行的查找操作,在查找表中查
8、找满足条件的数表上进行的查找操作,在查找表中查找满足条件的数据元素的存储位置或各种属性。本节将讨论以线性结据元素的存储位置或各种属性。本节将讨论以线性结构表示的静态查找表及相应的查找算法。构表示的静态查找表及相应的查找算法。现在学习的是第8页,共73页7.2.1 7.2.1 顺序查找顺序查找1.1.顺序查找的基本思想顺序查找的基本思想顺序查找是一种最简单的查找方法。其基本思想顺序查找是一种最简单的查找方法。其基本思想是将查找表作为一个线性表,可以是顺序表,也可以是将查找表作为一个线性表,可以是顺序表,也可以是链表,依次用查找条件中给定的值与查找表中数据是链表,依次用查找条件中给定的值与查找表中
9、数据元素的关键字值进行比较,若某个记录的关键字值与元素的关键字值进行比较,若某个记录的关键字值与给定值相等,则查找成功,返回该记录的存储位置,给定值相等,则查找成功,返回该记录的存储位置,反之,若直到最后一个记录,其关键字值与给定值均反之,若直到最后一个记录,其关键字值与给定值均不相等,则查找失败,返回查找失败标志。不相等,则查找失败,返回查找失败标志。现在学习的是第9页,共73页/*/*顺序存储结构顺序存储结构*/typedef structtypedef struct ElemType *elem ElemType *elem;/*/*数组基址数组基址*/int length int le
10、ngth;/*/*表长度表长度*/S_TBL S_TBL;/*/*链式存储结构结点类型链式存储结构结点类型*/typedef struct NODEtypedef struct NODE ElemType elem ElemType elem;/*/*结点的值域结点的值域*/struct NODE *nextstruct NODE *next;/*/*下一个结点指针域下一个结点指针域*/NodeTypeNodeType;现在学习的是第10页,共73页7.1顺序查找顺序查找查找过程:从表的一端开始逐个进行记录的关键字和给定查找过程:从表的一端开始逐个进行记录的关键字和给定值的比较值的比较算法描述
11、算法描述i例01234567891011513192137566475808892找6464监视哨iiii比较次数=5比较次数:查找第n个元素:1查找第n-1个元素:2.查找第1个元素:n查找第i个元素:n+1-i查找失败:n+1现在学习的是第11页,共73页顺序查找方法的顺序查找方法的ASL现在学习的是第12页,共73页 7.2.2 7.2.2 折半查找折半查找1.1.折半查找的基本思想折半查找的基本思想折半查找要求查找表用顺序存储结构存放且各数折半查找要求查找表用顺序存储结构存放且各数据元素按关键字有序(升序或降序)排列,也就是说据元素按关键字有序(升序或降序)排列,也就是说折半查找只适用
12、于对有序顺序表进行查找。折半查找只适用于对有序顺序表进行查找。现在学习的是第13页,共73页7.2折半查找折半查找查找过程:每次将待查记录所在区间缩小一半查找过程:每次将待查记录所在区间缩小一半适用条件:采用顺序存储结构的有序表适用条件:采用顺序存储结构的有序表算法实现算法实现设表长为设表长为n,low、high和和mid分别指向待查元素所在区分别指向待查元素所在区间的上界、下界和中点间的上界、下界和中点,k为给定值为给定值初始时,令初始时,令low=1,high=n,mid=(low+high)/2 让让k与与mid指向的记录比较指向的记录比较若若k=rmid.key,查找成功,查找成功若若
13、krmid.key,则,则low=mid+1重复上述操作,直至重复上述操作,直至lowhigh时,查找失败时,查找失败现在学习的是第14页,共73页算法描述算法描述lowhighmid例1234567891011513192137566475808892找211234567891011513192137566475808892lowhighmid1234567891011513192137566475808892lowhighmid现在学习的是第15页,共73页例1234567891011513192137566475808892lowhighmid找701234567891011513192
14、137566475808892lowhighmid1234567891011513192137566475808892low highmid1234567891011513192137566475808892lowhighmid现在学习的是第16页,共73页1234567891011513192137566475808892lowhigh1185210741936判定树:1234567891011513192137566475808892现在学习的是第17页,共73页算法评价算法评价判定树:描述查找过程的二叉树叫判定树:描述查找过程的二叉树叫有有n个结点的判定树的深度为个结点的判定树的深度为
15、log2n+1折半查找法在查找过程中进行的比较次数最多不超过其判定折半查找法在查找过程中进行的比较次数最多不超过其判定树的深度树的深度折半查找的折半查找的ASL现在学习的是第18页,共73页7.3分块查找分块查找查找过程:将表分成几块,块内无序,块间有序;先确定查找过程:将表分成几块,块内无序,块间有序;先确定待查记录所在块,再在块内查找待查记录所在块,再在块内查找适用条件:分块有序表适用条件:分块有序表算法实现算法实现用数组存放待查记录用数组存放待查记录,每个数据元素至少含有关键字域每个数据元素至少含有关键字域建立索引表,每个索引表结点含有最大关键字域和指向建立索引表,每个索引表结点含有最大
16、关键字域和指向本块第一个结点的指针本块第一个结点的指针算法描述算法描述如:一个含全校学生的查找表首先可按系分类,每个系内按年级分类,年级内则按班分类。现在学习的是第19页,共73页12345678910111213141516171822121389203342443824486058745786532248861713索引表查38子表中最大的关键字起始地址现在学习的是第20页,共73页分块查找方法评价分块查找方法评价现在学习的是第21页,共73页ASL最大最小两者之间表结构有序表、无序表 有序表分块有序表存储结构顺序存储结构线性链表顺序存储结构 顺序存储结构线性链表查找方法比较顺序查找折半查
17、找分块查找现在学习的是第22页,共73页7.3 动态查找动态查找 7.3.1 7.3.1 二叉排序树二叉排序树二叉排序树是一种常用的动态查找表,下面首先给二叉排序树是一种常用的动态查找表,下面首先给出它的非递归形式。出它的非递归形式。二叉排序树是一棵二叉树,它或者为空,或者具有如二叉排序树是一棵二叉树,它或者为空,或者具有如下性质:下性质:(1)任一非终端结点若有左孩子,则该结点的关键字)任一非终端结点若有左孩子,则该结点的关键字值大于其左孩子结点的关键字值。值大于其左孩子结点的关键字值。现在学习的是第23页,共73页(2)任一非终端结点若有右孩子,则该结点的关键字)任一非终端结点若有右孩子,
18、则该结点的关键字值小于其右孩子结点的关键字值。值小于其右孩子结点的关键字值。二叉排序树也可以用递归的形式定义,即二叉排序树二叉排序树也可以用递归的形式定义,即二叉排序树是一棵树,它或者为空,或者具有如下性质:是一棵树,它或者为空,或者具有如下性质:(1)若它的左子树非空,则其左子树所有结点的关键)若它的左子树非空,则其左子树所有结点的关键字值均小于其根结点的关键字值。字值均小于其根结点的关键字值。(2)若它的右子树非空,则其右子树所有结点的关键)若它的右子树非空,则其右子树所有结点的关键字值均大于其根结点的关键字值。字值均大于其根结点的关键字值。(3)它的左右子树都是二叉排序树。)它的左右子树
19、都是二叉排序树。例如,由关键字值序列(例如,由关键字值序列(62,15,68,46,65,12,57,79,35)构成的一棵二叉排序树如图构成的一棵二叉排序树如图7-4所示。所示。现在学习的是第24页,共73页判断该二叉树是否为二叉排序树现在学习的是第25页,共73页图图7-4现在学习的是第26页,共73页如果对上述二叉排序树进行中根遍历可以得到一如果对上述二叉排序树进行中根遍历可以得到一个关键字有序序列(个关键字有序序列(12,15,35,46,57,62,65,68,79),这),这是二叉排序树的一个重要特征,也正是由此将其称为是二叉排序树的一个重要特征,也正是由此将其称为“二叉排序树二叉
20、排序树”。现在学习的是第27页,共73页 7.3.2 7.3.2 二叉排序树的查找二叉排序树的查找二叉排序树的结构定义中可看到:一棵非空二叉二叉排序树的结构定义中可看到:一棵非空二叉排序树中根结点的关键字值大于其左子树上所有结点排序树中根结点的关键字值大于其左子树上所有结点的关键字值,而小于其右子树上所有结点的关键字值,的关键字值,而小于其右子树上所有结点的关键字值,所以在二叉排序树中查找一个关键字值为所以在二叉排序树中查找一个关键字值为k的结点的的结点的基本思想是:用给定值基本思想是:用给定值k与根结点关键字值比较,如果与根结点关键字值比较,如果k小于根结点的值,则要找的结点只可能在左子树中
21、,小于根结点的值,则要找的结点只可能在左子树中,所以继续在左子树中查找,否则将继续在右子树中查所以继续在左子树中查找,否则将继续在右子树中查找,依此方法,查找下去,至直查找成功或查找失败找,依此方法,查找下去,至直查找成功或查找失败为止。二叉排序树查找的过程描述如下:为止。二叉排序树查找的过程描述如下:现在学习的是第28页,共73页(1)若二叉树为空树,则查找失败,)若二叉树为空树,则查找失败,(2)将给定值)将给定值k与根结点的关键字值比较,若相等,与根结点的关键字值比较,若相等,则查找成功,则查找成功,(3)若根结点的关键字值小于给定值)若根结点的关键字值小于给定值k,则在左子,则在左子树
22、中继续搜索,树中继续搜索,(4)否则,在右子树中继续查找。)否则,在右子树中继续查找。假定二叉排序树的链式存储结构的类型定义如下:假定二叉排序树的链式存储结构的类型定义如下:现在学习的是第29页,共73页二叉排序树查找过程的描述是一个递归过程,若用二叉排序树查找过程的描述是一个递归过程,若用链式存储结构存储,其查找操作的递归算法如下所示:链式存储结构存储,其查找操作的递归算法如下所示:typedefstructNODE ElemTypeelem;/*数据元素字段数据元素字段*/structNODE*lc,*rc;/*左、右指针字段左、右指针字段*/NodeType;/*二叉树结点类型二叉树结点
23、类型*/现在学习的是第30页,共73页intSearchElem(NodeType*t,NodeType*p,NodeType*q,KeyTypekx)/*在在二二叉叉排排序序树树t上上查查找找关关键键码码为为kx的的元元素素,若若找找到到,返返回回1,且且q指指向向该该结结点点,p指指向向其其父结点;父结点;*/*否则,返回否则,返回0,且,且p指向查找失败的最后一个结点指向查找失败的最后一个结点*/int flag=0;*q=t;while(*q)/*从根结点开始查找从根结点开始查找*/if(kx(*q)-elem.key)/*kx大于当前结点大于当前结点*q的元素关键码的元素关键码*/*
24、p=*q;*q=(*q)-rc;/*将当前结点将当前结点*q的右子女置为新根的右子女置为新根*/elseif(kxelem.key)/*kx小于当前结点小于当前结点*q的元素关键码的元素关键码*/*p=*q;*q=(*q)-lc;/*将当前结点将当前结点*q的左子女置为新根的左子女置为新根*/elseflag=1;break;/*查找成功,返回查找成功,返回*/*while*/returnflag;现在学习的是第31页,共73页intSearchBST(BSTreeT,KeyTypekval,BSTreef,BSTree&p)/根指针根指针T所指二叉查找树中递归查找关键字等于所指二叉查找树中递
25、归查找关键字等于kval的数据元素的数据元素,若查找若查找成成/功功,则指针则指针p指向该数据元素结点指向该数据元素结点,并返回并返回TRUE,否则指针否则指针p指向查找路径指向查找路径上访上访/问的最后一个结点并返回问的最后一个结点并返回FALSE,指针指针f指向指向T的双亲的双亲,其初始调用值为其初始调用值为NULLif(!T)p=f;return0;/查找不成功查找不成功elseif(key=T-data.key)p=T;return1;/查找成功查找成功elseif(keydata.key)returnSearchBST(T-lchild,key,T,p);/返回在左子树中继续查找所得
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 数据结构 第八 查找
限制150内