(信息技术)第九章查找欢迎光临青岛科技大学信息科学技术学院

上传人:管****问 文档编号:127414530 上传时间:2020-04-02 格式:DOC 页数:8 大小:90.07KB
返回 下载 相关 举报
(信息技术)第九章查找欢迎光临青岛科技大学信息科学技术学院_第1页
第1页 / 共8页
(信息技术)第九章查找欢迎光临青岛科技大学信息科学技术学院_第2页
第2页 / 共8页
(信息技术)第九章查找欢迎光临青岛科技大学信息科学技术学院_第3页
第3页 / 共8页
(信息技术)第九章查找欢迎光临青岛科技大学信息科学技术学院_第4页
第4页 / 共8页
(信息技术)第九章查找欢迎光临青岛科技大学信息科学技术学院_第5页
第5页 / 共8页
点击查看更多>>
资源描述

《(信息技术)第九章查找欢迎光临青岛科技大学信息科学技术学院》由会员分享,可在线阅读,更多相关《(信息技术)第九章查找欢迎光临青岛科技大学信息科学技术学院(8页珍藏版)》请在金锄头文库上搜索。

1、第九章 查找 本章中介绍下列主要内容: 静态查找表及查找算法:顺序查找、折半查找 动态查找表及查找算法:二叉排序树 哈希表及查找算法第一节 基本概念查找表 用于查找的数据元素集合称为查找表。查找表由同一类型的数据元素(或记录)构成。静态查找表 若只对查找表进行如下两种操作:(1)在查找表中查看某个特定的数据元素是否在查找表中,(2)检索某个特定元素的各种属性,则称这类查找表为静态查找表。静态查找表在查找过程中查找表本身不发生变化。对静态查找表进行的查找操作称为静态查找。动态查找表 若在查找过程中可以将查找表中不存在的数据元素插入,或者从查找表中删除某个数据元素,则称这类查找表为动态查找表。动态

2、查找表在查找过程中查找表可能会发生变化。对动态查找表进行的查找操作称为动态查找。 关键字 是数据元素中的某个数据项。唯一能标识数据元素(或记录)的关键字,即每个元素的关键字值互不相同,我们称这种关键字为主关键字;若查找表中某些元素的关键字值相同,称这种关键字为次关键字。例如,银行帐户中的帐号是主关键字,而姓名是次关键字。 查找 在数据元素集合中查找满足某种条件的数据元素的过程称为查找。最简单且最常用的查找条件是关键字值等于某个给定值,在查找表搜索关键字等于给定值的数据元素(或记录)。若表中存在这样的记录,则称查找成功,此时的查找结果应给出找到记录的全部信息或指示找到记录的存储位置;若表中不存在

3、关键字等于给定值的记录,则称查找不成功,此时查找的结果可以给出一个空记录或空指针。若按主关键字查找,查找结果是唯一的;若按次关键字查找,结果可能是多个记录,即结果可能不唯一。查找表的存储结构 查找表是一种非常灵活的数据结构,对于不同的存储结构,其查找方法不同。为了提高查找速度,有时会采用一些特殊的存储结构。本章将介绍以线性结构、树型结构及哈希表结构为存储结构的各种查找算法。查找算法的时间效率 查找过程的主要操作是关键字的比较,所以通常以平均比较次数来衡量查找算法的时间效率。第二节 静态查找正如本章第一节所述:静态查找是指在静态查找表上进行的查找操作,在查找表中查找满足条件的数据元素的存储位置或

4、各种属性。本节将讨论以线性结构表示的静态查找表及相应的查找算法。1顺序查找1.1 顺序查找的基本思想顺序查找是一种最简单的查找方法。其基本思想是将查找表作为一个线性表,可以是顺序表,也可以是链表,依次用查找条件中给定的值与查找表中数据元素的关键字值进行比较,若某个记录的关键字值与给定值相等,则查找成功,返回该记录的存储位置,反之,若直到最后一个记录,其关键字值与给定值均不相等,则查找失败,返回查找失败标志。1.2 顺序表的顺序查找下面是顺序表的类型定义:#define MAX_NUM 100 /用于定义表的长度typedef struct elemtype keytype key; anyty

5、pe otherelem; Se_ListMAX_NUM,Se_Elem;假设在查找表中,数据元素个数为n(nMAX_NUM),并分别存放在数组的下标变量a1an中。下面我们给出顺序查找的完整算法。int seq_search (Se_List a,keytype k)/在顺序表中查找关键字值等于k的记录,/若查找成功,返回该记录的位置下标序号,否则返回0i=1;while (i=n & ai.key != k) i+; if (inext;while (p!=NULL) & (p-key!=k) p=p-next; return p;顺序查找算法简单,对表的结构无任何要求;但是执行效率较低,

6、尤其当n较大时,不宜采用这种查找方法。2折半查找2.1 折半查找的基本思想折半查找要求查找表用顺序存储结构存放且各数据元素按关键字有序(升序或隆序)排列,也就是说折半查找只适用于对有序顺序表进行查找。折半查找的基本思想是:首先以整个查找表作为查找范围,用查找条件中给定值k与中间位置结点的关键字比较,若相等,则查找成功,否则,根据比较结果缩小查找范围,如果k的值小于关键字的值,根据查找表的有序性可知查找的数据元素只有可能在表的前半部分,即在左半部分子表中,所以继续对左子表进行折半查找;若k的值大于中间结点的关键字值,则可以判定查找的数据元素只有可能在表的后半部分,即在右半部分子表中,所以应该继续

7、对右子表进行折半查找。每进行一次折半查找,要么查找成功,结束查找,要么将查找范围缩小一半,如此重复,直到查找成功或查找范围缩小为空即查找失败为止。 2.2 折半查找过程示例。2.3 折半查找算法假设查找表存放在数组a的a1an中,且升序,查找关键字值为k。折半查找的主要步骤为: (1)置初始查找范围:low=1,high=n;(2)求查找范围中间项:mid=(low+high)/2(3)将指定的关键字值k与中间项amid.key比较若相等,查找成功,找到的数据元素为此时mid 指向的位置;若小于,查找范围的低端数据元素指针low不变,高端数据元素指针high更新为mid-1;若大于,查找范围的

8、高端数据元素指针high不变,低端数据元素指针low更新为mid+1;(4)重复步骤(2)、(3)直到查找成功或查找范围空(lowhigh),即查找失败为止。(5)如果查找成功,返回找到元素的存放位置,即当前的中间项位置指针mid;否则返回查找失败标志。折半查找的完整算法如下:int bin_search (Se_List a, keytype k) low=1; high=n; /置初始查找范围的低、高端指针while (low=high) mid=(low+high)/2; /计算中间项位置if (k=amid.key) break; /找到,结束循环else if (k amid.key

9、) high=mid-1; /给定值k小else low=mid+1; /给定值k大if (low key = k ) return bt; else if (k key) return bt_search ( bt - lchild , k ); /在左子树中搜索else return bt_search ( bt - rchild , k ); /在右子树中搜索 这个过程也可以用非递归算法实现,算法描述如下:Bin_Sort_Tree_Linklist *bt_search1(Bin_Sort_Tree bt , keytype k) p = bt; /指针p指向根结点,搜索从根结点开始while ( p != NULL & p -key != k ) if (k key ) p = p - lchild; else p = p - rchild; return ( p);3二叉排序树的插入在一棵二叉排序树中插入一个结点可以用一个递归的过程实现,即:若二叉排序树为空,则新结点作为二叉排序树

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 商业/管理/HR > 经营企划

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号