• 数据结构(六)查找---查找概论和顺序表操作


    一:概论(可联系数据库)

    (一)查找表

    是由同一类型的元素(或记录)构成的集合。

    (二)关键字

    是数据元素中某个数据项的值,又称为键值,用他可以标识一个数据元素。也可以标识一个记录的每个数据项(字段),我们称为关键码

    (三)主关键字

    若此关键字可以唯一的标识一个记录,则称此关键字为主关键字

    (四)次关键字

    对于那些可以识别多个数据元素(或记录)的关键字,我们称为次关键字

    二:查找

    (一)定义

    查找就是根据给定的某个值,在查找表中确定一个其关键字等于给定值的数据元素(或记录)

    (二)分类(两大种:静态和动态)

    1.静态查找表:只作查找操作的查找表

    1.查询每个“特定的”数据元素是否在查找表中。
    2.检索每个“特定的”数据元素和各种属性
    使用线性结构来组织数据,这样可以使用顺序查找算法折半查找等高效查找

    2.动态查找表:在查找过程中同时插入查找表中不存在的数据元素,或者从查找表中删除已经存在的每个数据元素

    1.查找时插入数据元素
    2.查找时删除数据元素
    可以考虑二叉排序树和散列表结构

    三:顺序表查找

    顺序查找又叫线性查找,是最基本的查找技术,他的查找过程是:从表中第一个(或最后一个)记录开始,逐个进行记录的关键字和给定值比较,若是相等,则成功,找到所查记录;如果直到最后(或第一个)记录,其依旧不等,则查找失败
    就是一条一条,直到直到或者查找到最后。时间复杂度O(n)
    

    (一)顺序表查找算法

    //顺序查找,a为数组,n为要查找的数组个数,key为要查找的关键字
    int Seq_search(int* a, int n, int key)
    {
        int i;
        for (i = 0; i < n;i++)
        {
            if (a[i] == key)
                return i;
        }
        return 0;
    }

    (二)顺序表查找算法优化

    //顺序查找,a为数组,n为要查找的数组个数,key为要查找的关键字
    int Seq_search(int* a, int n, int key)
    {
        int i = n;
        a[0] = key;  //设置哨兵
        while (a[i] != key)
            i--;
        return i;
    }

    (三)分析:优化地方在哪?

    1.我们将(一)中循环改为while

    int Seq_search(int* a, int n, int key)
    {
        int i;
        while (i<n)
        {
            if (a[i] == key)
                return i;
            i++;
        }
        return 0;
    }
    这时,我们再同(二)比较,发现比(二)多了一个if判断,若是为n的长度数组,我们就可能多n个判断,所以我们将这个判断去掉。

    2.我们去掉了a[i]==key后,使用了哨兵来作为判断依据

    哨兵我们可以设置在第一位,也可以设置在最后一位,但是前提该位置不能被有效数据占用,必须为我们的哨兵留出。
    若是我们找不到数据,由于我们将哨兵位置数据设置为key,所以我们会在哨兵处找到数据,退出循环,我们只需要判断一次位置是不是哨兵就可以知道是否找到
  • 相关阅读:
    和为S的连续正数序列
    数组中只出现一次的数字
    平衡二叉树
    二叉树的深度
    水仙花数
    数列求和
    数值统计
    奇数乘积
    求绝对值
    求两点的距离
  • 原文地址:https://www.cnblogs.com/ssyfj/p/9498448.html
Copyright © 2020-2023  润新知