- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
第九章 查 找
在前几章中我们讨论了各种线性和非线性的数据结构,而在这一章中,我们将研究在实际应用中大量使用的,用于数据查找的数据结构——查找表。
9.1查找的概念
查找表(Search table)是由同一类数据元素(或记录)构成的集合。
对查找表进行的操作有:
查找某个“给定的”数据元素是否在表中;
检索某个“给定的”数据元素的各种属性;
在查找表中插入一个数据元素;
从查找表中删除某个数据元素。
在查找过程中,把要进行的操作分为两种类型。一种是只检查某个特定的记录是否存在于给定的记录集合(即上述四种操作的前二种操作),我们称这种查找表为静态查找表(static search table);另一种查找不但要检查记录集合中是否存在某个特定的记录,而且当该记录不存在时,要把它插入到记录集合中,或者当记录集合中存在该记录时,要将其内容进行修改或把它从记录集合中删去,这种查找表则称为动态查找表(dynamic search table)。
为了便于讨论,在此给出“给定的”一词的确切含义。首先我们需要介绍“关键字”的概念。
关键字(key)是数据元素中某个数据项的值,它可以标识一个数据元素。若它可以唯一地标识一个数据元素,则称此关键字为主关键字(primary key);反之,则称用来识别某些元素的关键字为次关键字(secondary key)。若数据元素只有一个数据项时,其关键字即为此数据元素的值。
查找(Searching)是确定在数据元素集合(查找表)中是否存在一个数据元素关键字等于给定值关键字的过程。
查找操作一般是通过比较数据元素的关键字完成的,与第8章类同,在本章的各个示例中,我们也只给出数据元素的关键字,而忽略其他数据项的内容。
查找的过程实际上是将给定值与记录集合中各记录的关键字相比较,从而确定给定值在记录集合中是否存在,以及存在时它在记录集合中的位置。如果在记录集合中能找到与给定值相等的关键字,则该关键字所属的记录就是所要查找的记录,此时我们称该查找是成功的,此时查找的结果为整个数据元素的信息,或者指出该数据元素在查找表中的位置;如果查遍整个记录集合(表)也未能找到与给定值相等的关键字,我们称该查找是失败的,此时查找的结果可给出一个“NULL”元素(或空指针)。
例如,在电话号码查询系统中,全部成员的电话号码可以用图9.1.1所示查找表的结构存储在计算机中。表中每一行为一个数据元素,成员的电话号码为元素的关键字。假设给定值通过查找可得成员李鹏的各项指标,此时查找成功。若给定值则表中没有关键字元素,查找失败。
电话号码
通讯地址
姓名
邮政编码
E-mail
…
…
…
…
…中南财大
李鹏
430071
lip@洪山路特一号
查话费
430070湖北日报
刘老根
430077
laogen@163.com
…
…
…
…
…
图9.1.1
显然,查找算法的设计与记录集合存储时所采用的存储结构有密切的关系。记录集合的存储结构主要有顺序表结构和树表结构。链表结构上的查找方法已在第二章中讨论过,本章不再讨论。
通常,静态查找采用顺序表结构,动态查找采用树表结构。静态查找采用顺序表可以最大限度地节省记录集合占用的存储空间,而动态查找采用树表可以减小插入或删除记录所用的时间。不同于顺序表和树表,哈希表的构造采用的是把关键字映射为数据元素存储地址的方法,因此,哈希表上的查找是把待查找关键字用同样的映射公式映射为数据元素地址的过程。
衡量查找算法效率的标准是平均查找长度(average search length),也就是为确定某一记录在记录集合中的位置,给定值关键字与集合中的记录关键字所需要进行的比较次数的期望值。对于具有n个记录的记录集合,查找某记录成功时的平均查找长度为:
ASL=Pi*Ci
其中,Pi为查找第i个记录的概率,假设每次查找的记录都存在,则有Pi=1;Ci为查找第i个记录所需要进行的比较次数。
在本章的讨论中涉及的数据元素将统一定义为如下的类型:
typedef struct
{
EtypeKey key; //数据元素数据项中关键字(key)的定义
DataType data; //数据元素其它数据项定义;
}EType;
9.2静态查找技术
静态查找表是在创建过程中建立的,在对数据元素的查找与访问过程中不能对它进行修改所以它不提供数据元素的插入与删除过程。在实现上,通常采用顺序表结构。顺序表上的查找主要有三种方法,这些方法都比较简单,本节对此作一一介绍。
1. 静态查找表的顺序存储表示
typedef struct
{ //查找表类型
EType *elem;
原创力文档


文档评论(0)