1 查找概论
查找表(Search Table)是由同一类型的数据元素(或记录)构成的集合,如下所示:
关键字(Key)是数据元素中某个数据项的值,又称为键值,用它可以标识一个数据元素,也可以标识一个记录的某个数据项(字段),我们称为关键码。
若此关键字可以唯一地标识一个记录,则称此关键字为主关键字(Primary Key)。对于那些可以识别多个数据元素(或记录)的关键字,我们称为次关键字(Secondary Key)。
查找(Searching)就是根据给定的某个值,在查找表中确定一个其关键字等于给定值的数据元素(或记录)。
查找表按照操作方式来分有两大种:静态查找表和动态查找表。
静态查找表(Static Search Table):只作查找操作的查找表。它的主要操作有:
(1) 查找某个特定的数据元素是否在查找表中;
(2) 检索某个特定的数据元素和各种属性;
动态查找表(Dynamic Search Table):在查找过程中同时插入查找表中不存在的数据元素,或者从查找表中删除已经存在的某个数据元素。动态查找表的操作有两个:
(1) 查找时插入数据元素;
(2) 查找时删除数据元素;
为了提高查找的效率,我们需要专门为查找操作设置数据结构,这种面向查找操作的数据结构称为查找结构。
2 顺序查找表
顺序查找(Sequential Search)又叫线性查找,是最基本的查找技术,它的查找过程是:从表中第一个(或最后一个)记录开始,逐个进行记录的关键字和给定值比较,若某个记录的关键字和给定值相等,则查找成功,找到所查的记录;如果直到最后一个(或第一个)记录,其关键字和给定值比较都不等时,则表中没有所查的记录,查找不成功。
代码实现较为简单:
/**
* sequential search
*
* @author Korbin
* @date 2023-04-19 11:01:06
**/
public class SequentialSearch<T extends Comparable<T>> {
/**
* sequential search
*
* @param data search key in this array
* @param key to be searched key
* @return the index of key in data
* @author Korbin
* @date 2023-04-19 11:23:13
**/
public int sequentialSearch(T[] data, T key) {
int n = data.length;
if (data[0].equals(key)) {
return 0;
}
data[0] = key;
int i = n - 1;
while (!data[i].equals(key)) {
i--;
}
return i;
}
}