软考算法——线性表、栈和队列、串、数组、矩阵和广义表

软考算法(一)

  • 线性表
    • 定义
      • 顺序表
      • 单链表
      • 循环链表
      • 双向链表
    • 性能分析
    • 线性表插入删除操作
  • 栈和队列
    • 队列
      • 循环队列
  • 串、数组、矩阵和广义表
      • 串的基本操作
      • 串的存储结构
    • 数组
      • 数组的存储地址计算
    • 矩阵——稀疏矩阵
      • 上三角矩阵
      • 下三角矩阵
    • 广义表

线性表

在这里插入图片描述

定义

线性表是具有相同数据类型的n(n>=0)个数据元素的有限序列,其中n为表长,当n=0时线性表是一个空表。若用L命名线性表,则一般表示为: L = ( a 1 , a 2 , a 3 , . . . , a i , a i + 1 , . . . , a n ) L = (a_1,a_2,a_3,...,a_i,a_i+_1,...,a_n) L=(a1,a2,a3,...,ai,ai+1,...,an)

  • ai是线性表中“第i个”元素线性表中的位序
  • a1是表头元素;an是表尾元素
  • 除第一个元素外,每个元素有且仅有一个直接前驱;除最后一个元素外,每个元素有且仅有一个直接后继。
    在这里插入图片描述

顺序表

在这里插入图片描述

单链表

在这里插入图片描述

循环链表

在这里插入图片描述

双向链表

在这里插入图片描述

性能分析

性能类别具体项目顺序存储链式存储
空间性能存储密度=1,更优<1
容量分配事先确定动态改变,更优
时间性能查找运算O(n/2)O(n/2)
读运算O(1),更优O([n+1]/2),最好情况为1,最坏情况为n
插入运算O(n/2),最好情况为0,最坏情况为nO(1),更优
删除运算O([n-1]/2)O(1),更优

线性表插入删除操作

  • 顺序存储
    插入元素前一要移动元素以挪出空的存储单元,然后再插入元素。删除元素同样需要移动元素,以填充被删除元素的存储单元
  • 链式存储
    ①单链表删除节点:
    在这里插入图片描述

当删除a2节点时,首先我们要引入一个q指针,q指针指向我们的a2节点(为了不丢掉a2节点中存储的数据),再用前一个节点a1指针域中的指针指向a2节点的下一个节点a3,这样就达到了一组删除操作。
②单链表插入节点
在这里插入图片描述

在a1和a2之间进行插入操作,引入一个s节点,指向要插入的x节点,接下来要先将x节点指针域中的指针指向a2节点,然后再将a1指针域中的指针指向下一个节点x,如果先将a1指针指向要插入的x节点,那么原本a1后面的a2节点等的数据就会损失。所以一定是先执行将x节点指针域中的指针指向a2节点。
③双向链表删除节点
在这里插入图片描述

引入p指针指向即将要进行删除的a2节点,然后用a1节点的后指针指向a2的下一个节点a3完,然后再用a3节点的前指针指向a1,完成连接
④双向链表插入节点
在这里插入图片描述

插入一个节点x,还是要引入一个指针q指向即将要插入的节点x,要先进行后面的连接,让x的next指针指向下一个节点a2,再把a2节点的前指针指回x节点,先连后面再连前面,和单链表的插入操作相同

栈和队列

线性表是具有相同数据类型的n(n>=0)个数据元素的有限序列,其中n为表长,当n=0时线性表是一个空表。若用L命名线性表,则一般表示为:
L = ( a 1 , a 2 , . . . , a i , a i + 1 , . . . , a n ) L=(a1,a2,...,ai,ai+1,...,an) L=(a1,a2,...,ai,ai+1,...,an)

(Stack)是只允许在一端进行插入或删除操作的线性表。
在这里插入图片描述

队列

队列是一种先进先出(FIFO)的线性表,它只允许在表的一端插入元素,而在表的另一端删除元素。在队列中,允许插入元素的一端称为队尾(Rear),允许删除元素的一端称为队头(Front)。
在这里插入图片描述

循环队列

循环队列是指将它的存储空间进行连接,让队列变成了一个环。循环队列有两个指针,头指针head和尾指针tail,往右插入数据时,tail不断的往后调,在删除数据时,head不断往后调。
在这里插入图片描述

循环队列队空条件:head=tail
循环队列队满条件:(tail+1)%size=head

串、数组、矩阵和广义表

是仅由字符构成的有限序列,是取值范围受限的线性表。一般记为S = ‘a1 a2 ~~~ an’,其中S是串名,a1 a2 an是串值。

  • 空串:长度为0的串,空串不包含任何字符。
  • 空格串:由一个或多个空格组成的串。
  • 子串:由串中任意长度的连续字符构成的序列。含有子串的串称为主串。子串在主串中的位置指子串首次出现时,该子串的第一个字符在主串中的位置。空串是任意串的子串。
  • 串相等:指两个串长度相等且对应位置上的字符也相同。
  • 串比较:两个穿比较大小时以字符的ASCII码值作为依据。比较操作从两个串的第一个字符开始进行,字符的ASCII码值大者所在的串为大;若其中一个串先结束,则以串长较大者为大。

串的基本操作

  • 赋值操作StrAssign(&T,chars):生成一个其值等于chars的串T。这通常涉及为串分配内存,并将chars的内容复制到新串中。
  • 连接操作Concat(s,t):将串t接续在串s的尾部,形成一个新串。
  • 求串长StrLength(s):返回串s的长度。
  • 串比较StrCompare(s,t):比较两个串的大小。
  • 求子串SubString(,start,len):返回串s中从start开始的、长度为len的字符序列。

串的存储结构

(1)串的顺序存储:定长存储结构
(2)串的链式存储:块链
子串的定位操作通常称为串的模式匹配,它是各种串处理系统中最重要的运算之一。子串也称为模式串。

数组

数组是一个固定长度的存储相同数据类型的数据结构,数组中的元素被存储在一段连续的内存空间中。

数组的存储地址计算

  • 一维数组a[n]
    a [ i ] 的存储地址为: a + i ∗ l e n a[i]的存储地址为:a+i*len a[i]的存储地址为:a+ilen
  • 二维数组a[m][n]
    a [ i ] [ j ] 的存储地址(按行存储)为: a + ( i ∗ n + j ) ∗ l e n a[i][j]的存储地址(按行存储)为:a+(i*n+j)*len a[i][j]的存储地址(按行存储)为:a+(in+j)len
    a [ i ] [ j ] 的存储地址(按列存储)为: a + ( j ∗ m + i ) ∗ l e n a[i][j]的存储地址(按列存储)为:a+(j*m+i)*len a[i][j]的存储地址(按列存储)为:a+(jm+i)len

例:已知5行5列的二维数组a中的各元素占两个字节,求元素a[2][3]按行优先存储的存储地址
由题意可知:m = 5,n = 5, len = 2,按行优先存储,那么a[2][3]的存储地址为:a+(25+3)2=a+26

矩阵——稀疏矩阵

稀疏矩阵是矩阵中的一种特殊类型。在矩阵中,若数值为0的元素数目远远多于非0元素的数目,并且非0元素分布没有规律时,则称该矩阵为稀疏矩阵。与之相反,若非0元素数目占大多数时,则称该矩阵为稠密矩阵。通常认为,当矩阵中非零元素的总数比上矩阵所有元素总数的值小于等于0.05时,该矩阵即可被视为稀疏矩阵,该比值也称为这个矩阵的稠密度。

上三角矩阵

在这里插入图片描述
在矩阵中下标分别为i和j的元素,对应的一维数组的下标计算公式为:(2n-i+1)*i/2+j

下三角矩阵

在这里插入图片描述

在矩阵中下标分别为i和j的元素,对应的一维数组的下标计算公式为:(i+1)*i/2+j

广义表

广义表是n个表元素组成的有限序列,是线性表的推广。
通常用递归的形式进行定义,记做:LS=( a 0 a_{0} a0, a 1 a_{1} a1,…, a n a_{n} an)。
注:其中LS是表名, a i a_{i} ai是表元素,它可以是表(称做子表),也可以是数据元素(称为原子)。其中n是广义表的长度(也就是最外层包含的元素个数),n = 0的广义表为空表;而递归定义的重数就是广义表的深度,直观的说,就是定义中所含括号的重数(原子的深度为0,空表的深度为1)
基本运算:取表头head(Ls)和取表尾tail(Ls)。
若有 L S 1 = ( a , ( b , c ) , ( d , e ) ) ,则 h e a d ( L S 1 ) = a t a i l ( L S 1 ) = ( ( b , c ) , ( d , e ) ) 若有LS1=(a,(b,c),(d,e)),则\\head(LS1)=a\\tail(LS1)=((b,c),(d,e)) 若有LS1=(a,(b,c),(d,e)),则head(LS1)=atail(LS1)=((b,c),(d,e))

ps:如果要将LS1中的b元素取出,则该怎么操作
基本操作有取表头和取表尾,而表中的元素也可以看做是广义表,那么我们先取一次表尾,得到子表((b,c),(d,e)),再取一次表头,得到它的子表(b,c),然后再取一次表头得到我们想要的元素b,即:head(head(tail(LS1))) 这样一个三层操作。

ps:如果记不住公式,可用代入法

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

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

相关文章

设置K8s管理节点异常容忍时间

说明 每个节点上的 kubelet 需要定时向 apiserver 上报当前节点状态&#xff0c;如果两者间网络异常导致心跳终端&#xff0c;kube-controller-manager 中的 NodeController 会将该节点标记为 Unknown 或 Unhealthy&#xff0c;持续一段时间异常状态后 kube-controller-manage…

软考——计算机网络概论

文章目录 &#x1f550;计算机网络分类1️⃣通信子网和资源子网2️⃣网络拓扑结构3️⃣ 计算机网络分类3&#xff1a;LAN MAN WAN4️⃣其他分类方式 &#x1f551;OSI 和 TCP/IP 参考模型1️⃣OSI2️⃣TCP/IP&#x1f534;TCP/IP 参考模型对应协议 3️⃣OSI 和 TCP/IP 模型对应…

AUTOSAR_EXP_ARAComAPI的6章笔记(4)

☞返回总目录 相关总结&#xff1a;《AUTOSAR 自适应应用中原始数据流传输的使用方法》总结 6.4 原始数据流传输的使用方法 本章描述了原始数据流&#xff08;RawDataStreams&#xff09;在 AUTOSAR 自适应应用程序中的使用方法。 目前&#xff0c;原始数据流传输在单播 / …

WSL2-轻量级AI训练场景最佳生产环境

WSL2 只适用于 Win 10 、Win11 在运行 AI 软件、AI 模型训练&#xff0c;Linux 是最佳的操作系统。 在运行各种软件&#xff0c;如&#xff1a;Stable Diffusion Web UI 等&#xff0c;使用 Docker 容器运行也更方便后期的快速复用&#xff0c;同样的 Docker 容器在 Linux 中…

基于springboot的网上服装商城推荐系统的设计与实现

基于springboot的网上服装商城推荐系统的设计与实现 开发语言&#xff1a;Java 框架&#xff1a;springboot JDK版本&#xff1a;JDK1.8 服务器&#xff1a;tomcat7 数据库&#xff1a;mysql 5.7 数据库工具&#xff1a;Navicat11 开发软件&#xff1a;idea 源码获取&#xf…

安灯系统助力汽车零部件工厂快速解决生产异常

在汽车零部件制造领域&#xff0c;高效的生产管理和快速解决异常情况是确保产品质量和生产进度的关键。而安灯系统的应用&#xff0c;正为汽车零部件工厂带来了全新的变革&#xff0c;助力其快速解决生产异常。 汽车零部件工厂的生产报工产线看板直观地反映出生产的各项关键数据…

基于SpringBoot的“心灵治愈交流平台”的设计与实现(源码+数据库+文档+PPT)

基于SpringBoot的“心灵治愈交流平台”的设计与实现&#xff08;源码数据库文档PPT) 开发语言&#xff1a;Java 数据库&#xff1a;MySQL 技术&#xff1a;SpringBoot 工具&#xff1a;IDEA/Ecilpse、Navicat、Maven 系统展示 系统功能界面图 登录、用户注册界面图 心灵专…

【有啥问啥】智能座舱中的儿童遗留检测(CPD,Child Presence Detection)技术详解

智能座舱中的儿童遗留检测&#xff08;CPD&#xff0c;Child Presence Detection&#xff09;技术详解 引言 儿童遗留检测&#xff08;CPD&#xff0c;Child Presence Detection&#xff09;系统是一项旨在保护儿童免受因被遗忘在车内而导致的热中暑危险的重要安全技术。近年…

HCIP-HarmonyOS Application Developer 习题(十五)

&#xff08;判断&#xff09;1、在HarmonyOs中发布带权限公共事件&#xff0c;发布者首先要在config.json中申请所需的权限。 答案&#xff1a;正确 分析&#xff1a;发布携带权限的公共事件&#xff1a;构造CommonEventPublishInfo对象&#xff0c;设置订阅者的权限。 &#…

书生营 L0G4000 玩转HF/魔搭/魔乐社区

模型下载 在codespace上给环境装包&#xff0c;按照教材即可 运行后下载成功 建立下载json文件 新建下载internlm2_5-chat-1_8b的json文件 运行结果 基本上没啥问题&#xff0c;照着教程来就行 模型上传&#xff08;可选&#xff09; push的时候需要先认证token 最后的…

Linux 权限的理解

内容摘要 本文内容包括shell的运行原理&#xff0c;包括外壳程序的原理、理解、和意义&#xff0c;以及从两个方面对于权限的理解&#xff08;人和事物的属性&#xff09;、修改文件的权限&#xff0c;包括修改文件的拥有者、修改文件拥有者所在的组的用户以及修改文件的三类用…

域渗透AD渗透攻击利用 MS14-068漏洞利用过程 以及域渗透中票据是什么 如何利用

目录 wmi协议远程执行 ptt票据传递使用 命令传递方式 明文口令传递 hash口令传递 票据分类 kerberos认证的简述流程 PTT攻击的过程 MS14-068 漏洞 执行过程 wmi协议远程执行 wmi服务是比smb服务高级一些的&#xff0c;在日志中是找不到痕迹的&#xff0c;但是这个主…

鸿蒙中富文本编辑与展示

富文本在鸿蒙系统如何展示和编辑的&#xff1f;在文章开头我们提出这个疑问&#xff0c;带着疑问来阅读这篇文章。 富文本用途可以展示图文混排的内容&#xff0c;在日常App 中非常常见&#xff0c;比如微博的发布与展示&#xff0c;朋友圈的发布与展示&#xff0c;都在使用富文…

【树莓派 5B】anaconda换源 更换清华源

【树莓派 5B】anaconda换源 更换清华源 前言 本文基于树莓派5B上运行的 Raspberrypi-OS-64bit &#xff08;Debian 12 Bookworm&#xff09;平台&#xff0c;更换 Anaconda 官方源为清华大学镜像源&#xff0c;旨在解决网络连接超时、连接官方源失败、下载速度慢的问题。 参…

spring (Aop) day 1024

ok了家人们&#xff0c;继续学习spring &#xff0c;这段知识点有点绕&#xff0c;建议搭配b站的视频去学&#xff0c;passion&#xff01;&#xff01;&#xff01; 八.AOP-面向切面编程 8.1 动态代理 8.1.1 概述 什么是代理&#xff1f;在现实生活中&#xff0c;代理很常见…

学习虚幻C++开发日志——TSet

TSet 官方文档&#xff1a;虚幻引擎中的Set容器 | 虚幻引擎 5.5 文档 | Epic Developer Community (epicgames.com) TSet 是通过对元素求值的可覆盖函数&#xff0c;使用数据值本身作为键&#xff0c;而不是将数据值与独立的键相关联。 默认情况下&#xff0c;TSet 不支持重…

iOS 18.2开发者预览版 Beta 1版本发布,欧盟允许卸载应用商店

苹果今天为开发人员推送了iOS 18.2开发者预览版 Beta 1版本 更新&#xff08;内部版本号&#xff1a;22C5109p&#xff09;&#xff0c;本次更新距离上次发布 Beta / RC 间隔 2 天。该版本仅适用于支持Apple Intelligence的设备&#xff0c;包括iPhone 15 Pro系列和iPhone 16系…

【设计模式系列】观察者模式

一、什么是观察者模式 观察者模式&#xff08;Observer Pattern&#xff09;是一种行为设计模式&#xff0c;它定义了对象之间的一对多依赖关系&#xff0c;当一个对象的状态发生变化时&#xff0c;所有依赖于它的对象都会得到通知并自动更新。这种模式也被称为发布-订阅模式&…

「重磅」中国电信数据湖+数据中台实施方案(附60页方案)

来源:公众号-数据分析小兵 作者按 哈喽,大家好,我是数据分析小兵,今天小兵向大家分享中国电信基于数据湖的数据中台实施方案。 方案核心内容一:数据湖的搭建与实施 数据湖是一套针对海量多源异构数据,具备数据采集、数据存储、数据计算、数据访问、数据管理的技术架构…

1.CentOS安装

CentOS安装 新建虚拟机 选择安装方式 指定镜像方式 选择操作系统类型 设置虚拟机名称和位置 指定磁盘大小 点击“自定义硬件” 指定内存大小 指定镜像位置 点击“开启此虚拟机” 选择“Install CentOS 7”并回车 选择语言 选择安装“GNOME桌面”环境 配置安装位置 配置网络和…