数据结构和算法之线性结构
原文出处:数据结构和算法之线性结构 关注码农爱刷题,看更多技术文章!!!
线性结构是一种逻辑结构,是我们编程开发工作应用最广泛的数据结构之一。线性结构是包含n个相同性质数据元素的有限序列。它的基本特征是,在数据元素的非空有限集中:
(1)存在唯一的“最后的元素”。
(2)存在唯一的“第一个元素”。
(3)除最后的元素之外,其它数据元素均有唯一的“直接后继”。
(4)除第一个元素之外,其它数据元素均有唯一的“直接前驱”。
在实际的应用中,产生的典型线性结构有以下几种:线性表、栈、队列。
(1)如果允许在序列任意位置进行操作,这种线性结构称为线性表。
(2)如果只允许在序列末端进行操作,这种线性结构称为栈。
(3)如果只允许在序列两端进行操作,这种线性结构称为队列。
从三者的概念上可以看出,栈和队列是线性表的特定场景实现。
一、线性表
线性表本质上还是一种抽象的逻辑概念,是线性结构逻辑概念的细分。线性表根据存储结构实现方式不同,可分为顺序表和链表。
1. 顺序表
顺序表是采用顺序存储结构实现的线性表,一组地址连续的存储单元依次存放线性表的数据元素,即以存储位置相邻表示位序相继的两个元素之间的前驱和后继关系,从而使得逻辑上相邻的两个元素在物理位置上也相邻。顺序表具有以下典型特征:

数组符合顺序表的特征,是典型的、具体的顺序表结构的应用和实现。数组继承了顺序表的特征,会为存储的元素都分配一个下标(索引),此下标是一个自增连续的,访问数组中的元素通过下标进行访问;数组下标从0开始访问,至数组长度-1结束。同时,数组作为一种基础且常见的数据结构,既频繁应用在各类算法之中,也可用于实现各种复杂数据结构。数组访问元素的时间复杂度为O(1),增删元素的时间复杂度为O(n)。
在C和JAVA语言中,数组大小是固定的,保留了数组随机访问查询效率高的优点,避免了插入删除低的劣势。顺序表和数组虽然查询效率高,但是增删效率低下显然不能满足广泛使用的需求,于是一种能快速在任意位置插入和删除元素的线性表链表应运而出。
2.链表
链表是采用链式存储结构实现的线性表,和顺序表采用地址连续的存储单元不同,链表是通过一组任意的存储单元来存储线性表中的数据元素,具有以下特征:

链表根据指针域指向不同,可分为单向链表、双向链表和循环链表,循环链表又分循环单向链表和循环双向链表,具体定义如下:

其中单向链表和数组一样,是一种基础且常见的数据结构,常用于实现其他复杂数据结构。它具备链表的基本特征,插入和删除结点的时间复杂度为O(1),查找结点时间复杂度为O(n),寻找直接后继结点的时间复杂度为O(1),其他链表都是在单向链表基础上变化。
二、栈
正如前文所说,栈是线性表的特殊实现,仅能在线性表的一端操作,栈顶允许操作,栈底不允许操作。栈的特点是:先进后出,从栈顶放入元素的操作叫入栈(压栈),取出元素叫出栈(弹栈);
入栈操作如下图:

出栈操作如下图:

正如线性表可以采用顺序存储结构和链式存储结构实现,栈作为线性表的特例,自然也可以使用前述两种存储结构表示, 使用顺序存储结构的栈称之为顺序栈或栈表,使用链式存储的栈称之为链栈。
栈的入栈出栈操作时间复杂度为O(1),空间复杂栈的空间复杂度取决于栈中存储的数据量。如果栈中存储的数据量与输入数据的大小成正比,那么空间复杂度为O(n),其中n为输入数据的大小。例如,在实现深度优先搜索(DFS)算法时,如果使用栈来保存搜索路径,那么空间复杂度将与输入图的大小相关,可能达到O(n)。然而,如果栈的使用是固定的,不随输入数据的大小变化,那么空间复杂度为O(1)。例如,在实现一些固定的数据结构操作时,如简单的算术运算,空间复杂度可以视为常数,因为无论输入数据多大,所需的空间是固定的。
三、队列
队列与栈一样,也是一种线性表,其限制是仅允许在表的一端进行插入,而在表的另一端进行删除。队列的特点是先进先出,从一端放入元素的操作称为入队,取出元素为出队;其操作如下图:

队列根据存储结构表示不同,也可以分为顺序队列和链式队列,还有双端队列,其中链式队列就是通过单向链表实现的,双端队列可以通过双向链表实现。列入队和出队时间复杂度通常为O(1),空间复杂度为O(1)。
在具体的编程语言中,大多是采用数组和链表取实现更复杂的数据结构。例如Java,通过动态数组实现了ArrayList,因为是用数组实现,其存储结构就是顺序存储的,因而具有顺序表的特征,插入删除效率低,查询元素效率高,但又不完全等同顺序表,因为它的空间是可以动态扩容的;Stack类则是通过具有线程安全的动态数组Vector实现的,具备栈先进后出的特征同时又具备线程安全性。LinkedList底层则是通过双向链表实现的,具有链表插入删除元素效率高、结点查询效率低的特征。而Java的Queue实现方式有多种,其中之一就是使用双向链表的实现LinkedList类来完成;而Deque接口是Queue接口的一个扩展,提供了在队列两端操作的方法,Deque接口的实现类包括ArrayDeque和LinkedList,因而LinkedList还可以用于双端队列的实现。

码农爱刷题
为计算机编程爱好者和从业人士提供技术总结和分享 !为前行者蓄力,为后来者探路!
9篇原创内容
相关文章:
数据结构和算法之线性结构
原文出处:数据结构和算法之线性结构 关注码农爱刷题,看更多技术文章!!! 线性结构是一种逻辑结构,是我们编程开发工作应用最广泛的数据结构之一。线性结构是包含n个相同性质数据元素的有限序列。它的基本特征是&…...
3. 轴指令(omron 机器自动化控制器)——>MC_MoveAbsolute
机器自动化控制器——第三章 轴指令 4 MC_MoveAbsolute变量▶输入变量▶输入输出变量▶输入输出变量 功能说明▶指令详情▶时序图▶重启运动指令▶多重启动运动指令▶异常 示例程序1▶参数设定▶动作示例▶梯形图▶结构文本(ST) 示例程序2▶参数设定▶动作示例▶梯形图▶结构文…...
ai 回答HFS是什么 HTTP的文件服务器是什么
HFS(HTTP File Server)是一个基于HTTP协议的文件服务器软件,它允许用户通过浏览器访问和共享计算机上的文件。HFS的特点包括界面简洁直观、易于安装和配置、支持虚拟文件系统、多种权限设置等。用户可以轻松地在本地网络或互联网上共享文件和…...
OpenHarmony(鸿蒙南向开发)——小型系统内核(LiteOS-A)【内核启动】
往期知识点记录: 鸿蒙(HarmonyOS)应用层开发(北向)知识点汇总 鸿蒙(OpenHarmony)南向开发保姆级知识点汇总~ 子系统开发内核 轻量系统内核(LiteOS-M) 轻量系统内核&#…...
若依笔记(六):前后端token鉴权体系
文章目录 前端/login后端生成token后端拦截前端的动态路由简单总结下若依的前后端token鉴权体系流程: 1、前端是通过/login接口来获取jwt-token的,jwt的配置在后端的application.yml中 2、后端处理/login请求时先检验redis中验证码然后使用spring-security内部机制(过滤链)…...
java框架
Oozie任务调度框架 Hue hadoop的WEB工具 seatunnel 数据同步框架 TIDB 大数据库支持事物 StreamX fink和spark的集成 OceanBase 阿里巴巴数据库 dooringx-lib、AntV 可视化H5工具 lowcode、Appsmith(推荐)、nocoBase 、Budibase、taskbuilder 低代…...
利器 | 测试必会之 Linux 三剑客 ( grep / awk / sed )
Linux 给人的印象是黑乎乎的神秘窗口,文本操作和数据处理似乎没有 Windows 窗口界面直观方便。其实Linux 有自己的独特的法宝,称之为三剑客:grep,awk 和 sed。你可以用这三件法宝很方便的处理数据 :查找,分…...
【Git原理与使用】多人协作与开发模型(2)
目录 一、多人协作 (一)多人协作一 1、情景 2、 origin/master 3、git branch 4、远程链接 5、总结 (二)多人协作二 1、引言 2、情景 3、流程 4、解决方法 二、企业级开发模型 1、DevOps背景 2、DevOps是什么 3、DevCps与git的关系 4、系统开发环境 5、Git分支设计规范 6、企业…...
Linux vi常用命令
参考资料 viコマンド(vimコマンド)リファレンス 目录 一. 保存系命令二. 删除系命令三. 移动系命令四. 复制粘贴系命令 一. 保存系命令 ⏹保存并退出 :wq⏹强制保存并退出 :wq!⏹退出(文件未编辑) :q⏹强制退出(忽略已编辑内容) :q!⏹另存为 :w 新…...
天地伟业设备主动注册协议接入SVMSPro接入
天地伟业主动注册协议接入SVMSPro平台 ** 图文手册: ** 步骤一:进天地伟业网页或者NVR界面进参数配置选项,左边选网络参数-注册中心,填写平台信息 账号/密码:设备的账号密码 服务器名称:任意 IP地址&#…...
C++日期类详解 第二级支线任务
日期类的整体 class Date { public:// 构造函数Date(int year 0, int month 1, int day 1);// 打印函数void Print() const;// 日期天数Date& operator(int day);// 日期天数Date operator(int day) const;// 日期-天数Date& operator-(int day);// 日期-天数Date …...
java--通用启动/停止shell脚本
脚本 #!/bin/bash# 定义超时时间(秒) timeout10# 检查命令参数 case "$1" instart|stop|restart|help)action"$1"jar_file"$2";;*)echo "Usage: $0 {start|stop|restart|help} [jar_file]"exit 1;; esac# 定义…...
Flutter-底部选择弹窗(showModalBottomSheet)
前言 现在有个需求,需要用底部弹窗来添加定时的重复。在这里使用原生的showModalBottomSheet来实现 showModalBottomSheet的Props 名称 描述 isScrollControlled全屏还是半屏isDismissible外部是否可以点击,false不可以点击,true可以点击&a…...
Linux——k8s认识
计算资源隔离 - 更方便进行高并发架构的维护和升级 - 架构管理的灵活性更高,不再以单个节点的物理资源作为基础 技术: - 硬件辅助虚拟化 - 容器技术 在企业部署方案中,很少以单节点实现虚拟化和容器技术,一般以集群状态来运…...
EC Shop安装指南 [ Apache PHP Mysql ]
这个是软件测试课上老师布置的一个作业,期间老师也出现了不少错误,所以还是有必要记录一下吧,凑一篇文章 主要是老师的文档以及自己的一些尝试记录,试错记录,解决方案等 主要介绍了Apache的安装,MySQL的安…...
无线感知会议系列【3】【基于WiFi和4G/5G的非接触无线感知:挑战、理论和应用-1】
前言: 2020年北京智源大会 张大庆老师的一个报告 参考链接: 基于WiFi和4G/5G的非接触无线感知:挑战、理论和应用_哔哩哔哩_bilibili 目录: 无线感知简介 无线感知的核心 研究方向 Frsenel 模型 基于Fresnel 感知的应用举例…...
Virtuoso服务在centos中自动停止的原因分析及解决方案
目录 前言1. 问题背景2. 原因分析2.1 终端关闭导致信号12.2 nohup命令的局限性 3. 解决方案3.1 使用 screen 命令保持会话3.2 使用 tmux 作为替代方案3.3 使用系统服务(systemd) 4. 其他注意事项4.1 网络配置4.2 日志监控 结语 前言 在使用Virtuoso作为…...
泽众P-One性能测试平台火焰图帮助定位产品性能问题
在软件开发过程中,性能问题往往是最头疼的问题之一。随着软件系统的日益复杂,快速准确地定位并解决性能问题变得尤为重要。泽众P-One作为一站式性能测试平台,通过引入火焰图性能分析可视化工具,极大地提升了性能问题的定位效率和解…...
数据结构修炼——顺序表和链表的区别与联系
目录 一、线性表二、顺序表2.1 概念及结构2.2 接口实现2.3 一些思考以及顺序表的缺点 三、链表3.1 概念及结构3.2 链表的分类3.3 链表的实现3.3.1 无头单向非循环链表3.3.2 带头双向循环链表 四、顺序表和链表的区别 一、线性表 线性表(linear list)是n…...
AD9854 为什么输出波形幅度受限??
🏆本文收录于《全栈Bug调优(实战版)》专栏,主要记录项目实战过程中所遇到的Bug或因后果及提供真实有效的解决方案,希望能够助你一臂之力,帮你早日登顶实现财富自由🚀;同时,欢迎大家关注&&am…...
从WWDC看苹果产品发展的规律
WWDC 是苹果公司一年一度面向全球开发者的盛会,其主题演讲展现了苹果在产品设计、技术路线、用户体验和生态系统构建上的核心理念与演进脉络。我们借助 ChatGPT Deep Research 工具,对过去十年 WWDC 主题演讲内容进行了系统化分析,形成了这份…...
理解 MCP 工作流:使用 Ollama 和 LangChain 构建本地 MCP 客户端
🌟 什么是 MCP? 模型控制协议 (MCP) 是一种创新的协议,旨在无缝连接 AI 模型与应用程序。 MCP 是一个开源协议,它标准化了我们的 LLM 应用程序连接所需工具和数据源并与之协作的方式。 可以把它想象成你的 AI 模型 和想要使用它…...
解锁数据库简洁之道:FastAPI与SQLModel实战指南
在构建现代Web应用程序时,与数据库的交互无疑是核心环节。虽然传统的数据库操作方式(如直接编写SQL语句与psycopg2交互)赋予了我们精细的控制权,但在面对日益复杂的业务逻辑和快速迭代的需求时,这种方式的开发效率和可…...
LeetCode - 394. 字符串解码
题目 394. 字符串解码 - 力扣(LeetCode) 思路 使用两个栈:一个存储重复次数,一个存储字符串 遍历输入字符串: 数字处理:遇到数字时,累积计算重复次数左括号处理:保存当前状态&a…...
汽车生产虚拟实训中的技能提升与生产优化
在制造业蓬勃发展的大背景下,虚拟教学实训宛如一颗璀璨的新星,正发挥着不可或缺且日益凸显的关键作用,源源不断地为企业的稳健前行与创新发展注入磅礴强大的动力。就以汽车制造企业这一极具代表性的行业主体为例,汽车生产线上各类…...
【机器视觉】单目测距——运动结构恢复
ps:图是随便找的,为了凑个封面 前言 在前面对光流法进行进一步改进,希望将2D光流推广至3D场景流时,发现2D转3D过程中存在尺度歧义问题,需要补全摄像头拍摄图像中缺失的深度信息,否则解空间不收敛…...
从零开始打造 OpenSTLinux 6.6 Yocto 系统(基于STM32CubeMX)(九)
设备树移植 和uboot设备树修改的内容同步到kernel将设备树stm32mp157d-stm32mp157daa1-mx.dts复制到内核源码目录下 源码修改及编译 修改arch/arm/boot/dts/st/Makefile,新增设备树编译 stm32mp157f-ev1-m4-examples.dtb \stm32mp157d-stm32mp157daa1-mx.dtb修改…...
C++.OpenGL (10/64)基础光照(Basic Lighting)
基础光照(Basic Lighting) 冯氏光照模型(Phong Lighting Model) #mermaid-svg-GLdskXwWINxNGHso {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-GLdskXwWINxNGHso .error-icon{fill:#552222;}#mermaid-svg-GLd…...
成都鼎讯硬核科技!雷达目标与干扰模拟器,以卓越性能制胜电磁频谱战
在现代战争中,电磁频谱已成为继陆、海、空、天之后的 “第五维战场”,雷达作为电磁频谱领域的关键装备,其干扰与抗干扰能力的较量,直接影响着战争的胜负走向。由成都鼎讯科技匠心打造的雷达目标与干扰模拟器,凭借数字射…...
CVE-2020-17519源码分析与漏洞复现(Flink 任意文件读取)
漏洞概览 漏洞名称:Apache Flink REST API 任意文件读取漏洞CVE编号:CVE-2020-17519CVSS评分:7.5影响版本:Apache Flink 1.11.0、1.11.1、1.11.2修复版本:≥ 1.11.3 或 ≥ 1.12.0漏洞类型:路径遍历&#x…...
