大话数据结构-查找-顺序查找表

260 阅读2分钟

1 查找概论

  查找表(Search Table)是由同一类型的数据元素(或记录)构成的集合,如下所示:

image.png

  关键字(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;
    }

}