1、2第第9章章 查查 找找l关键字关键字:能标识一个数据元素(或记录)的数据项。:l主关键字主关键字:能唯一地标识一个记录的关键字。l次关键字次关键字:用以识别若干记录的关键字。学号学号 姓名姓名 专业专业 年龄年龄 20090001 王洪王洪 自动化自动化 17 20090002 李文李文 自动化自动化 18 20090003 谢军谢军 自动化自动化 18 20090004 张辉张辉 信息工程信息工程 20 20090005 李文李文 信息工程信息工程 193第第9章章 查查 找找l查找:查找:根据给定的某个值,在查找表中确定一个其根据给定的某个值,在查找表中确定一个其关键字等于给定值的记录或
2、数据元素,若表中存在这关键字等于给定值的记录或数据元素,若表中存在这样的记录,则称查找样的记录,则称查找成功成功,查找,查找结果结果为该记录在查找为该记录在查找表中的位置;否则称为查找表中的位置;否则称为查找不成功不成功,查找,查找结果结果为为0或或NULL。学号学号 姓名姓名 专业专业 年龄年龄 20090001 王洪王洪 自动化自动化 17 20090002 李文李文 自动化自动化 18 20090003 谢军谢军 自动化自动化 18 20090004 张辉张辉 信息工程信息工程 20 20090005 李文李文 信息工程信息工程 194第第9章章 查查 找找l查找方法评价查找方法评价l查
3、找算法的基本操作:查找算法的基本操作:比较比较l平均查找长度平均查找长度ASL(Average Search Length):为确为确定记录在表中的位置,需和给定值进行定记录在表中的位置,需和给定值进行比较比较的关键的关键字个数的字个数的期望值期望值。l平均查找长度:平均查找长度:ASL=PiCi l Pi:查找第:查找第 i 个记录的概率,且个记录的概率,且 Pi=1;l Ci:查找第 i 个记录所需的比较次数。个记录所需的比较次数。5第第9章章 查查 找找l关键字类型定义关键字类型定义 typedef float KeyType;实型实型 typedef int KeyType;整型整型
4、typedef char*KeyType;字符串型字符串型l数据元素类型定义数据元素类型定义 typedef struct KeyType key;关键字域关键字域 其他域其他域 ElemType;key 6第第9章章 查查 找找l对数值型关键字对数值型关键字#define EQ(a,b)(a)=(b)#define LT(a,b)(a)(b)#define LQ(a,b)(a)=(b)l对字符串型关键字对字符串型关键字#define EQ(a,b)(!strcmp(a),(b)#define LT(a,b)(strcmp(a),(b)0)#define LQ(a,b)(strcmp(a),(
5、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顺序表类型定义顺序表类型定
6、义 typedef struct ElemType *elem;/0号单元留空号单元留空 int length;SSTable;9.1 静态查找表静态查找表-顺序表查找顺序表查找与线性表顺序与线性表顺序与线性表顺序与线性表顺序存储结构比较一下存储结构比较一下存储结构比较一下存储结构比较一下 0 1 2 3 4 5 6 7 8 9 10 m-10 1 2 3 4 5 6 7 8 9 10 m-1 45 61 1245 61 12 3 37 24 90 53 98 78 3 37 24 90 53 98 78ST.elemSSTable ST;12int Search_Seq(SSTable ST
7、,KeyType key)ST.elem0.key=key;/“哨兵哨兵”for(i=ST.length;!EQ(key,ST.elemi.Key;-i);return i;/若表中不存在待查元素若表中不存在待查元素,i=09.1 静态查找表静态查找表 0 1 2 3 4 5 6 7 8 9 10 m-10 1 2 3 4 5 6 7 8 9 10 m-1 45 61 1245 61 12 3 37 24 90 53 98 78 3 37 24 90 53 98 78ST.elemkey免去查找过程中每免去查找过程中每一步都要检测整个一步都要检测整个表是否查找完毕表是否查找完毕13例例1:在下
8、表中查找在下表中查找 key=8 的结点。的结点。9.1 静态查找表静态查找表80 01 12 2n-3n-3n-2n-2n-1n-1n nST.elemST.elem keykey10010010100 07 71 13 3iiiiiii查找不成功,查找不成功,i=080 01 12 2n-3n-3n-2n-2n-1n-1n nST.elemST.elem keykey例例2:10010010100 08 81 13 3iii查找成功,查找成功,i=n-214l顺序查找顺序查找的特点:的特点:无排序要求;存储结构:顺序、链式;平均查找长度平均查找长度ASLSS=(n+1)/2;9.1 静态查
9、找表静态查找表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 的记录。的记录
10、。9.1 静态查找表静态查找表-有序表查找有序表查找 1 2 3 4 5 6 7 8 9 101 2 3 4 5 6 7 8 9 10 3 12 24 37 45 53 61 78 90 983 12 24 37 45 53 61 78 90 98lowlow midmid highhigh 1 2 3 4 5 6 7 8 9 101 2 3 4 5 6 7 8 9 10 3 12 24 37 45 53 61 78 90 983 12 24 37 45 53 61 78 90 98lowlowmidmid highhigh 242445 45 24241212 1 2 3 4 5 6 7 8
11、 9 101 2 3 4 5 6 7 8 9 10 3 12 24 37 45 53 61 78 90 98 3 12 24 37 45 53 61 78 90 98LowLow highhighmidmid17int Search_Bin(SSTable ST,KeyType key)low=1;high=ST.length;return 0;/表中不存在待查元素表中不存在待查元素/Search_Bin9.1 静态查找表静态查找表-有序表查找有序表查找while(lowkey,令,令highmid1low=1high=7mid=4012key4891011131934567elemhigh=
12、3mid=2low=1ST.elemmid.key8 key,令,令highmid1high=7mid=4low=1low=1high=3mid=2ST.elemmid.key8 key,令,令highmid1low=1mid=1ST.elemmid.key4 highlow high,查找不成功!查找不成功!521l折半查找折半查找的特点:要求元素按关键字要求元素按关键字有序有序。顺序顺序。平均查找长度平均查找长度 ASLbs=log2(n+1)-19.1 静态查找表静态查找表-有序表查找有序表查找22l查找表的组织:分块索引,除表本身以外,尚查找表的组织:分块索引,除表本身以外,尚需建立一
13、个需建立一个“索引表索引表”。l查找方法:查找索引表;在数据查找方法:在数据块内顺序查找块内顺序查找9.1 静态查找表静态查找表-索引顺序表的查找索引顺序表的查找1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 1822 12 13 8 9 20 33 42 44 38 24 48 60 58 74 57 86 5322 48 861 7 13索引表(块内最大值)索引表(块内最大值)查查3823l查找方法比较查找方法比较9.1 静态查找表静态查找表ASL最大最大最小最小两者之间两者之间表结构表结构有序表、无序表有序表、无序表有序表有序表分块有序表分块有序表存储
14、结构存储结构顺序存储结构顺序存储结构线性链表线性链表顺序存储结构顺序存储结构顺序存储结构顺序存储结构线性链表线性链表顺序查找顺序查找折半查找折半查找分块查找分块查找24l二叉排序树二叉排序树:或者是一棵空树;或者是具有下列:或者是具有下列性质的二叉树性质的二叉树:(1)若左子树不空,则)若左子树不空,则左子树左子树上所有结点的值均上所有结点的值均小于小于根结点的值;根结点的值;(2)若右子树不空,则)若右子树不空,则右子树右子树上所有结点的值均上所有结点的值均大于大于根结点的值;(3)根结点的左、右)根结点的左、右子树子树也分别为也分别为二叉排序树二叉排序树。9.2 动态查找表动态查找表25例
15、:在二叉排序树中查找关键字为例:在二叉排序树中查找关键字为24的记录。9.2 动态查找表动态查找表 45 12 3 37 53 90 24 7898 6126例:在二叉排序树中查找关键字为60的记录。9.2 动态查找表动态查找表 45 12 3 37 53 90 24 7898 6127l二叉排序树的存储二叉排序树的存储typedef struct BiTNode TElemType data;struct BiTNode*lchild,*rchild;BiTNode,*BTree;typedef struct KeyType key;TElemType;9.2 动态查找表动态查找表Lchild data rchild key 28例:二叉排序树中插入结点例:二叉排
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1