数据结构与算法基础(王卓)(25)线性表的查找(1):顺序查找(线性查找)

news2024/11/28 21:00:09

基本基础概念:

 

看这就不用去翻PPT了


查找:

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


关键字:

用来表示一个数据元素(或记录)的某个数据项的值

主关键字:

可以唯一地表示一个记录的关键字【例(如):准考证号】

次关键字:

用以识别若干记录的关键字【例(如):姓名为xx,成绩为xx分...】


查找表:(动态静态)

由同一类型的数据元素(或记录)构成的集合。由于集合中的数据元素之间存在着松散的关系,因此查找表是一种应用灵便的结构

静态查找表:

做查询、检索操作的查找表

动态查找表:

做插入、删除操作的查找表


对查找表常进行的几个操作:

  • 1.查询某个特定的数据元素是否在查找表中
  • 2.检索某个特定的数据元素的各种属性
  • 3.如果查询结果为不存在,则在查找表中插入一个数据元素
  • 4.如果查询结果为存在,则删除查找表中的某个数据元素

查找算法的评价标准:

关键字的平均比较次数,也叫平均查找长度(ASL)


 回归程序:

一、顺序查找(线性查找)


前置条件:

#include<iostream>
using namespace std;

typedef int KeyType;
//数据元素类型定义
struct ElemType
{
    KeyType key;  //关键字域
    //...           //其他域
};

struct SSTable
    //Sequential Search Table
{
    ElemType* R;  //表基址
    int length;   //表长
};  
SSTable ST;  //定义顺序表ST

第一种形式:(常规)

  • 从前往后逐个比较元素
  • 只要指向的数组元素和我们要的目标元素一样就返回
int Search_Seq(SSTable ST, KeyType key)
//Seq:顺序
//此查找表为从1开始,0号位置为空,可按需更改
{
    //正序
    for (int i = 1; i <= ST.length; i++)
        if (ST.R[i].key == key)
            return i;
    return 0;

    //倒序
    /*
    for (int i = ST.length; i >= 1 ; i--)
        if (ST.R[i].key == key)
            return i;
    return 0;
    */
}

第二种形式:

  • 从头开始
  • 只要指向的数组元素和我们要的目标元素不一样
  • 就(一直)继续往后比

倒序则遍历顺序相反

int Search_Seq(SSTable ST, KeyType key)
{
    //正序
    int i;
    for (i = 1; ST.R[i].key != key; i++)
    {
        if (i >= ST.length)
            break;
    }
    if (i > 0)
        return i;
    else
        return 0;

    //倒序
    /*
    int i;
    for (i = ST.length; ST.R[i].key != key; i--)
        {
        if (i <= 0)
            break;
    }
    if (i > 0)
        return i;
    else
        return 0;
    */
}

第三种形式:

int Search_Seq(SSTable ST, KeyType key)
{
    //正序
    int i;
    for (i = 1 ; ST.R[i].key != key && i <= ST.length; i++);
    return i;

    //倒序
    /*
    int i;
    for (i = ST.length; ST.R[i].key != key && i > 0; i--);
    return i;
    */
}

类似:

  • 从头开始
  • 只要指向的数组元素和我们要的目标元素不一样  且比较的指针没有超出队伍外
  • 就(一直)继续往后比

第二、三种形式的思想从根本上和第一种没有什么区别

只是第二、三种形式把不相等就进入下一轮循环放到循环的判断语句当中

的 for循环没有执行语句


顺序查找最终最简算法:

以上算法的问题(不足):

每次循环都需要进行两次比较

那么我们如何将它改进为:每次循环只需要进行一次比较,不需要进行两次比较  呢?

改进操作:

把待查关键字key存入表头(哨兵/监视哨),从后往前逐个比较

办法原理:

免去查找过程中每一步都要检查是否查找完毕的步骤

且保证无论如何函数都会有最终的返回结果

程序实现: 

int Search_Seq(SSTable ST, KeyType key)
{
    //正序
    ST.R[0].key = key;
    int i;
    for (i = 1; ST.R[i].key != key; i++);
    return i;

    //倒序
    /*
    ST.R[0].key = key;
    int i;
    for (i = ST.length; ST.R[i].key != key; i--);
    return i;
    */
}

当ST.lenath较大时,此改进能使进行一次查找所需的平均时间几乎减少一半

时间空间复杂度:(不算哨兵)

时间复杂度O(n)、空间复杂度O(1),ASL=(n+1)/2


另外, 还有一个

关于使用【ST.R[ ]】的纠纷问题,详见:

数据结构与算法基础(王卓)(26)线性表的查找(2):顺序查找(二分查找、分块查找)

中的问题(1):【ST.R[mid].key】

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/423146.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

系统安全与应用【下】

文章目录1.开关机安全控制1.1 GRUB限制1.2 实例&#xff1a;GRUB 菜单设置密码2.终端登录安全控制2.1 限制root只在安全终端登录2.2 禁止普通用户登录3.弱口令检测3.1 Joth the Ripper,JR4.网络端口扫描4.1 nmap命令1.开关机安全控制 1.1 GRUB限制 限制更改GRUB引导参数 通常情…

读懂MAC地址

MAC地址是一种用于标识计算机网络设备的唯一地址。它是由48个二进制数字组成的&#xff0c;通常表示为12个十六进制数字&#xff0c;每两个数字之间用冒号或连字符分隔开。MAC地址由设备制造商在生产过程中分配&#xff0c;以确保网络上每个设备都有唯一的标识符。 MAC地址的规…

投影仪怎么连接电脑?快来看看这3种方法!

案例&#xff1a;如何连接电脑和投影仪&#xff1f; 【想看电影&#xff0c;但是电脑屏幕太小&#xff0c;我想把电脑上的内容通过投影仪投到大屏幕上。有小伙伴知道如何连接电脑和投影仪吗&#xff1f;谢谢大家&#xff01;】 使用投影仪可以将电脑或其他设备上的内容投放到…

Java——矩形覆盖

题目链接 牛客在线oj题——矩形覆盖 题目描述 我们可以用 21 的小矩形横着或者竖着去覆盖更大的矩形。请问用 n 个 21 的小矩形无重叠地覆盖一个 2*n 的大矩形&#xff0c;从同一个方向看总共有多少种不同的方法&#xff1f; 数据范围&#xff1a;0≤n≤38 进阶&#xff1…

九龙证券|啤酒龙头一季度净利暴增逾70倍!钛白粉开启年内第三次涨价

业内人士遍及认为&#xff0c;随着下流需求逐渐改进&#xff0c;钛白粉职业景气量有望恢复。 燕京啤酒昨日晚间发布一季度成绩预告&#xff0c;公司2023年一季度预计完成归母净利润6200万至6600万元&#xff0c;同比增加7076.76%至7539.77%。对于成绩变动的原因&#xff0c;燕京…

K8s为什么要放弃Docker

公司定期分享整理的资料 放弃始由 https://github.com/kubernetes/kubernetes/blob/master/CHANGELOG/CHANGELOG-1.20.md#deprecation 2020 年&#xff0c;k8s 1.20 终于正式向 Docker “宣战”&#xff1a;kubelet将弃用 Docker 支持&#xff0c;并将在未来的版本中完全移除。…

Linux高性能服务器编程|阅读笔记:第1章 - TCP/IP协议族

简介 Hello! 非常感谢您阅读海轰的文章,倘若文中有错误的地方,欢迎您指出~ ଘ(੭ˊᵕˋ)੭ 昵称:海轰 标签:程序猿|C++选手|学生 简介:因C语言结识编程,随后转入计算机专业,获得过国家奖学金,有幸在竞赛中拿过一些国奖、省奖…已保研 学习经验:扎实基础 + 多做笔…

CLIMS:弱监督语义分割的跨语言图像匹配

文章目录CLIMS: Cross Language Image Matching for Weakly Supervised Semantic Segmentation摘要方法语言图像匹配框架实验结果CLIMS: Cross Language Image Matching for Weakly Supervised Semantic Segmentation 摘要 存在的问题 CAM(类激活图)通常只激活有区别的对象区…

第二章 数据类型与变量

文章目录1. 字面常量2. 数据类型3. 变量3.1 变量概念3.2 语法格式3.3 整形变量3.3.1 int整型变量(4 个字节)3.3.2 long长整型变量&#xff08;8 个字节&#xff09;3.3.3 short短整型变量(2 个字节)3.3.4 byte字节型变量&#xff08;1个字节&#xff09;3.4 浮点型变量3.4.1 do…

图片的四个角怎么做成圆弧形,2种方法分享

图片的四个角怎么做成圆弧形&#xff1f;今天来说一说直角和圆弧&#xff0c;小伙伴们可能会疑惑了&#xff0c;怎么今天讲的内容和之前不一样啊&#xff0c;不要着急干货在后面&#xff0c;听我娓娓道来。相信很多小伙伴们都使用过iphone手机&#xff0c;每年的产品发布会都会…

用高中生的思维写一篇MATLAB入门

文章目录一、简介二、MATLAB的工作界面三、基本语句1、if语句2、switch语句3、try语句4、for语句和while语句5、break语句和continus语句四、数值运算1、基本算术运算2、format命令3、关系运算4、逻辑运算5、特殊变量和常数6、数学函数五、二维平面绘图1、关于颜色和数据标记点…

微积分——用积分定义自然对数的动机

第6章 对数函数&#xff0c;指数函数和反三角函数 目录 第6章 对数函数&#xff0c;指数函数和反三角函数 6.1 引言 6.2 用积分定义自然对数的动机 内容来源&#xff1a;<> Tom M. Apostol 6.1 引言 每当有人将他的注意力集中到数量关系的时候&#xff0c;他要么是…

NIFI大数据进阶_实时同步MySql的数据到Hive中去_可增量同步_实时监控MySql数据库变化_操作方法说明_02---大数据之Nifi工作笔记0034

然后我们继续来看,如果需要同步,当然需要先开启mysqlbin log日志了 可以看到开启操作 在windows和linux上开启binlog日志 然后看一下 在windows上开启mysql的binlog的方法

ES X-Pack密码认证与用户管理

用户数据的安全性一直被人诟病且默认没有密码认证&#xff0c;Elasticsearch在6.8之前官方的X-pack安全认证功能都是收费的&#xff0c;所以很多人都采用Search Guard或者ReadOnly REST这些免费的安全插件对Elasticsearch进行安全认证。从Elasticsearch 6.8开始&#xff0c;Sec…

Java集成工作流经典案例(多个项目优化精华版)

前言 activiti工作流引擎项目&#xff0c;企业erp、oa、hr、crm等企事业办公系统轻松落地&#xff0c;请假审批demo从流程绘制到审批结束实例。 一、项目形式 springbootvueactiviti集成了activiti在线编辑器&#xff0c;流行的前后端分离部署开发模式&#xff0c;快速开发平…

爆款来袭!刷屏的Auto-GPT与ChatGPT区别,GPT成为AI领域最受关注的技术,你还在等什么?(狂飙 啊。。。Github 80k star了)

最近全网火爆刷屏的热门词auto-gpt&#xff0c;在全网站频频出现: "ChatGPT 过时了&#xff0c;Auto-GPT才是未来" "它所具备的能力主打的就是一个“自主”&#xff0c;完全不用人类插手的那种&#xff01;" 到底什么是auto-gpt? 1、Auto-GPT和ChatGP…

zabbix创建自定义监控模板之自动注册,代理服务器

目录 第一章zabbix 自动注册&#xff08;对于 agent2 是主动模式&#xff09; 1.1.环境准备 1.2.修改 zabbix-agent2 配置文件 1.3.在 Web 页面配置自动注册 第二章部署 zabbix 代理服务器 2.1.环境部署 2.2.安装 zabbix 所需的数据库yum install -y mariadb-server mar…

ChatGPT应用场景与工具推荐

目录 写在前面 一、关于ChatGPT 二、应用实例 1.写文章 2.入门新的知识 3.解决疑难问题 4.生成预演问题 5.文本改写 6.语言翻译 7.思维导图 8.PDF阅读理解 9.操作格式化的数据 10.模拟场景 11.写代码 三、现存局限 写在前面 本文会简单介绍ChatGPT的特点、局限以…

Baumer工业相机堡盟工业相机如何通过BGAPI SDK获取每张图像的微秒时间和FrameID(C#)

BGAPI SDK获取图像微秒级时间和FrameID Baumer工业相机Baumer工业相机FrameID技术背景一、FrameID是什么&#xff1f;二、使用BGAPI SDK获取图像微秒时间和FrameID步骤 1.获取SDK图像微秒级时间2.获取SDK图像FrameIDBaumer工业相机使用微秒级时间和FrameID保存的用处Baumer工业…

深度理解Vuex的用法及实例讲解

背景&#xff1a; 在项目里面写一个公共的方法&#xff0c;只要有需要的table的column需要变色就直接调用这个方法就好了&#xff0c;不需要在自己的子页面写方法。 如下图&#xff0c;写一个column变色的公共方法。 源代码&#xff1a; 下面的源代码将以上面背景需求为例子…