查找的基本概念 1.定义 简单地说,查找 (Search) 就是确定一个已给的数据是否出现在某个数据元素集合中。 查找(Searching)的定义是:给定一个值K,在含有n个结点的表中找出关键字等于给定值K的结点。若找到,则查找成功,返回该结点的信息或该结点在表中的位置;否则查找失败,返回相关的指示信息。 2.查找的结果 一种是查到该记录,即查找成功,此时查找的结果为给出整个记录的信息,或指出该记录在查找表中的位置; 另一种是查不到该记录,即查找失败,此时查找的结果可给出查找不成功的信息,或者给出一个“空”记录或“空”指针。 3.查找的方法 按查找表的结构可将查找表分为静态查找表和动态查找表两类。 (1)静态查找 静态查找表是指在查找过程中其结构始终不发生变化的查找表。 按查找表的存储方式,静态查找表分为顺序表和静态树表,顺序表又可以分为无序表和有序表两种。 (2)动态查找 动态查找表是指其结构在查找过程中要发生变化的查找表。 动态查找表则由于其结构在查找过程中要发生变化,一般都采用树表的形式。 4.平均查找长度 讨论各种查找算法时,常以算法的效率和存贮开销来衡量查找算法的优劣。然而,效率和存贮开销常常是相互制约的,很难两者兼顾。 效率只是相对的,通常把对关键字的最多比较次数和平均比较次数作为两个基本的技术指标,前者叫做最大查找长度 (Maximum Search Length , MSL), 后者叫做平均查找长度 (Average Search Length , ASL) 。 对 n 个记录进行查找时,平均查找长度为: 其中: ①n是结点的个数; ②Pi是查找第i个结点的概率。若不特别声明,认为每个结点的查找概率相等,即 pl=p2…=pn=1/n ③ci是找到第i个结点所需进行的比较次数。 注意: 为了简单起见,假定表中关键字的类型为整数: typedef int KeyType; //KeyType应由用户定义