北京理工大学数据结构查找课件PPT文档格式.ppt
《北京理工大学数据结构查找课件PPT文档格式.ppt》由会员分享,可在线阅读,更多相关《北京理工大学数据结构查找课件PPT文档格式.ppt(57页珍藏版)》请在冰豆网上搜索。
![北京理工大学数据结构查找课件PPT文档格式.ppt](https://file1.bdocx.com/fileroot1/2022-10/19/d17da675-27f6-4554-a5f5-e09ea179180d/d17da675-27f6-4554-a5f5-e09ea179180d1.gif)
2第第9章章查查找找l关键字关键字:
能标识一个数据元素(或记录)的数据项。
:
l主关键字主关键字:
能唯一地标识一个记录的关键字。
l次关键字次关键字:
用以识别若干记录的关键字。
学号学号姓名姓名专业专业年龄年龄20090001王洪王洪自动化自动化1720090002李文李文自动化自动化1820090003谢军谢军自动化自动化1820090004张辉张辉信息工程信息工程2020090005李文李文信息工程信息工程193第第9章章查查找找l查找:
查找:
根据给定的某个值,在查找表中确定一个其根据给定的某个值,在查找表中确定一个其关键字等于给定值的记录或数据元素,若表中存在这关键字等于给定值的记录或数据元素,若表中存在这样的记录,则称查找样的记录,则称查找成功成功,查找,查找结果结果为该记录在查找为该记录在查找表中的位置;
否则称为查找表中的位置;
否则称为查找不成功不成功,查找,查找结果结果为为0或或NULL。
学号学号姓名姓名专业专业年龄年龄20090001王洪王洪自动化自动化1720090002李文李文自动化自动化1820090003谢军谢军自动化自动化1820090004张辉张辉信息工程信息工程2020090005李文李文信息工程信息工程194第第9章章查查找找l查找方法评价查找方法评价l查找算法的基本操作:
查找算法的基本操作:
比较比较l平均查找长度平均查找长度ASL(AverageSearchLength):
为确为确定记录在表中的位置,需和给定值进行定记录在表中的位置,需和给定值进行比较比较的关键的关键字个数的字个数的期望值期望值。
l平均查找长度:
平均查找长度:
ASL=PiCilPi:
查找第:
查找第i个记录的概率,且个记录的概率,且Pi=1;
lCi:
查找第i个记录所需的比较次数。
个记录所需的比较次数。
5第第9章章查查找找l关键字类型定义关键字类型定义typedeffloatKeyType;
实型实型typedefintKeyType;
整型整型typedefchar*KeyType;
字符串型字符串型l数据元素类型定义数据元素类型定义typedefstructKeyTypekey;
关键字域关键字域其他域其他域ElemType;
key6第第9章章查查找找l对数值型关键字对数值型关键字#defineEQ(a,b)(a)=(b)#defineLT(a,b)(a)(b)#defineLQ(a,b)(a)=(b)l对字符串型关键字对字符串型关键字#defineEQ(a,b)(!
strcmp(a),(b)#defineLT(a,b)(strcmp(a),(b)0)#defineLQ(a,b)(strcmp(a),(b)=0)7第第9章章查查找找9.1静态查找表静态查找表9.2动态查找表动态查找表9.3哈希表哈希表9l静态查找表静态查找表无序表无序表的查找:
的查找:
顺序顺序查找查找有序表有序表的查找:
折半折半查找查找索引顺序表索引顺序表的查找:
分块分块查找查找9.1静态查找表静态查找表10l查找表查找表用用线性表线性表表示表示L1=(45,61,12,3,37,24,90,53,98,78)l用用顺序表顺序表表示静态查找表表示静态查找表l用用线性链表线性链表表示静态查找表表示静态查找表l查找方法:
查找方法:
顺序顺序查找查找9.1静态查找表静态查找表11l顺序表类型定义顺序表类型定义typedefstructElemType*elem;
/0号单元留空号单元留空intlength;
SSTable;
9.1静态查找表静态查找表-顺序表查找顺序表查找与线性表顺序与线性表顺序与线性表顺序与线性表顺序存储结构比较一下存储结构比较一下存储结构比较一下存储结构比较一下012345678910m-1012345678910m-145611245611233724905398783372490539878ST.elemSSTableST;
12intSearch_Seq(SSTableST,KeyTypekey)ST.elem0.key=key;
/“哨兵哨兵”for(i=ST.length;
!
EQ(key,ST.elemi.Key;
-i);
returni;
/若表中不存在待查元素若表中不存在待查元素,i=09.1静态查找表静态查找表012345678910m-1012345678910m-145611245611233724905398783372490539878ST.elemkey免去查找过程中每免去查找过程中每一步都要检测整个一步都要检测整个表是否查找完毕表是否查找完毕13例例1:
在下表中查找在下表中查找key=8的结点。
的结点。
9.1静态查找表静态查找表8001122n-3n-3n-2n-2n-1n-1nnST.elemST.elemkeykey100100101000771133iiiiiii查找不成功,查找不成功,i=08001122n-3n-3n-2n-2n-1n-1nnST.elemST.elemkeykey例例2:
100100101000881133iii查找成功,查找成功,i=n-214l顺序查找顺序查找的特点:
的特点:
无排序要求;
存储结构:
顺序、链式;
平均查找长度平均查找长度ASLSS=(n+1)/2;
9.1静态查找表静态查找表15l查找表:
用查找表:
用有序表有序表表示表示l查找方法:
折半折半查找(二分查找)查找(二分查找)l查找过程:
先确定待查记录所在的范围(区间),然查找过程:
先确定待查记录所在的范围(区间),然后后逐步缩小范围逐步缩小范围直到找到或找不到该记录为止。
直到找到或找不到该记录为止。
例:
有原始查找表有原始查找表45,61,12,3,37,24,90,53,98,78为进行折半查找,需要先进行为进行折半查找,需要先进行排序排序:
L=(3,12,24,37,45,53,61,78,90,98)9.1静态查找表静态查找表-有序表查找有序表查找16例:
查找例:
查找Key=24的记录。
的记录。
9.1静态查找表静态查找表-有序表查找有序表查找123456789101234567891031224374553617890983122437455361789098lowlowmidmidhighhigh123456789101234567891031224374553617890983122437455361789098lowlowmidmidhighhigh2424454524241212123456789101234567891031224374553617890983122437455361789098LowLowhighhighmidmid17intSearch_Bin(SSTableST,KeyTypekey)low=1;
high=ST.length;
return0;
/表中不存在待查元素表中不存在待查元素/Search_Bin9.1静态查找表静态查找表-有序表查找有序表查找while(lowkey,令,令highmid1low=1high=7mid=4012key4891011131934567elemhigh=3mid=2low=1ST.elemmid.key8key,令,令highmid1high=7mid=4low=1low=1high=3mid=2ST.elemmid.key8key,令,令highmid1low=1mid=1ST.elemmid.key4highlowhigh,查找不成功!
查找不成功!
521l折半查找折半查找的特点:
要求元素按关键字要求元素按关键字有序有序。
顺序顺序。
平均查找长度平均查找长度ASLbs=log2(n+1)-19.1静态查找表静态查找表-有序表查找有序表查找22l查找表的组织:
分块索引,除表本身以外,尚查找表的组织:
分块索引,除表本身以外,尚需建立一个需建立一个“索引表索引表”。
l查找方法:
查找索引表;
在数据查找方法:
在数据块内顺序查找块内顺序查找9.1静态查找表静态查找表-索引顺序表的查找索引顺序表的查找12345678910111213141516171822121389203342443824486058745786532248861713索引表(块内最大值)索引表(块内最大值)查查3823l查找方法比较查找方法比较9.1静态查找表静态查找表ASL最大最大最小最小两者之间两者之间表结构表结构有序表、无序表有序表、无序表有序表有序表分块有序表分块有序表存储结构存储结构顺序存储结构顺序存储结构线性链表线性链表顺序存储结构顺序存储结构顺序存储结构顺序存储结构线性链表线性链表顺序查找顺序查找折半查找折半查找分块查找分块查找24l二叉排序树二叉排序树:
或者是一棵空树;
或者是具有下列:
或者是具有下列性质的二叉树性质的二叉树:
(1)若左子树不空,则)若左子树不空,则左子树左子树上所有结点的值均上所有结点的值均小于小于根结点的值;
根结点的值;
(2)若右子树不空,则)若右子树不空,则右子树右子树上所有结点的值均上所有结点的值均大于大于根结点的值;
(3)根结点的左、右)根结点的左、右子树子树也分别为也分别为二叉排序树二叉排序树。
9.2动态查找表动态查找表25例:
在二叉排序树中查找关键字为例:
在二叉排序树中查找关键字为24的记录。
9.2动态查找表动态查找表451233753902478986126例:
在二叉排序树中查找关键字为60的记录。
9.2动态查找表动态查找表451233753902478986127l二叉排序树的存储二叉排序树的存储typedefstructBiTNodeTElemTypedata;
structBiTNode*lchild,*rchild;
BiTNode,*BTree;
typedefstructKeyTypekey;
TElemType;
9.2动态查找表动态查找表Lchilddatarchildkey28例:
二叉排序树中插入结点例:
二叉排