03链表+栈+队列(D1_链表(D1_基础学习))
目录
一、什么是链表
二、基本操作
三、为什么要使用链表
四、为什么能够在常数时间访问数组元素
数组优点
数组缺点
五、动态数组诞生
链表优点
链表缺点
六、链表、数组和动态数组的对比
七、 链表种类
1. 单向链表
2. 双向链表
3. 循环链表
八、链表衍生
......
一、什么是链表
链表是一种用于存储数据集合的数据结构。
链表有以下属性:
- 相邻元素之间通过指针连接
- 最后一个元素的后继指针值为 NULL
- 在程序执行过程中,链表的长度可以增加或缩小
- 链表的空间能够按需分配(直到系统内存耗尽)
- 没有内存空间的浪费(但是链表中的指针需要一些额外的内存开销)

二、基本操作
增删改查、计数等操作
三、为什么要使用链表
如果使用数组,整个数组所有的元素都存储在操作系统分配的一个内存块中。
通过使用特定元素的索引作为数组下标,可以在常数时间内访问数组元素。
四、为什么能够在常数时间访问数组元素
为了访问一个数组元素,该元素的内存地址需要计算其距离数组基地址的偏移量。
需用一个乘法计算偏移量,再加上基地址,就可获得某个元素的内存地址。
数组优点
简单且易用。
访问元素快(常数时间)
数组缺点
- 大小固定:数组的大小是静态的(在使用前指定数组的大小)。
- 分配一个连续空间块:数组初始分配空间时,有时无法分配能存储整个数组的内存空间(当数组规模太大时)。
- 基于位置的插入或删除操作实现复杂:
比如说:
如果要在数组中的给定位置插人元素,可能需要移动存储在数组中的其他元素,
这样才能腾出指定的位置来放插入的新元素,如果在数组的开始位置插人元素,那么移动操作的开销将更大。
五、动态数组诞生
动态数组是一种可随机存取且可自动调整大小的线性数据结构,能够添加或删除元素。
也称为可增数组、可变长数组、动态表、数组列表,在Java语言,就是ArrayList。
实现动态数组的一个简单方法是,首先初始化固定大小的数组。
一旦数组存储满了,创建一个两倍于原始数组大小的新数组。
同样,若数组中存储的元素个数小于数组大小的一半,则把数组大小减少一半。
链表优点
可以在常数时间内扩展。
当创建数组时必须分配能存储一定数量元素的内存。
如果向数组中添加更多的元素,那么必须创建一个新的数组,然后把原数组中的元素复制到新数组中,这将花费
大量的时间。而我们的链表是动态分配存储空间,采取的是随机分配存储。
链表缺点
链表有许多不足,链表的主要缺点在于访问单个元素的时间开销问题。
数组是随机存取的,即存取数组中任一元素的时间开销为O(1)。而链表在最差情况下访问一个元素的开销为
O(n)。
数组在存取时间方面的另外一个优点是内存的空间局部性。
由于数组被定义为连续的内存块,所以任何数组元素与其邻居是物理相邻的。
这极大得益于现代CPU的缓存模式。
尽管链表的动态分配存储空间有很大的优势,但在存储和检索数据的开销方面却有很大的不足。
有时很难对链表操作。
如果要删除最后一项,倒数第二项必须更改后继指针值为NULL。
这需要从头遍历链表,找到倒数第二个结点的链接,并设置其后继指针为 NULL。
最后,链表中的额外指针引用需要浪费内存。
六、链表、数组和动态数组的对比
七、 链表种类
1. 单向链表
链表通常是指单向链表,它包含多个结点,每个结点有一个指向后继元素的next(下一个)指针。
表中最后一个结点的next指针值为 NULL,表示该链表的结束。

2. 双向链表
双向链表的优点是:对于链表中一个给定的结点,可以从两个方向进行操作。
在单向链表中,只有获得结点的前驱结点的指针,才能删除该结点。
然而,在双向链表中,即使没有一个结点的前驱结点的地址,也能删除该结点,
因为每个结点有都一个指向前驱结点的指针,可以直接后退到前驱结点。

双向链表缺点:
每个结点需再添加一个额外的指针,因此需要更多的空间开销。
结点的插人或删除更加费时,因为它需要更多的指针操作。
3. 循环链表
在单向链表和双向链表中,都采用 NULI 值表示链表的结束,然而,循环链表没有结束标志。
当遍历循环链表时需要特别小心,否则将会无限地遍历链表,因为在循环链表中每个结点都有一个后继结点。
与单向链表不同,循环链表中没有next 指针为 NULI 的结点。
循环链表在某些情况下是非常有用的。
例如,当多个进程需要在相同的时间内使用同一个计算机资源(CPU)时,
必须确保在所有其他进程使用这些资源完前,没有进程访问该资源(轮询算法)
在循环链表中,使用表头结点访问元素(与单向链表和双向链表中的表头结点相似)

上图,指的是单向循环链表,当然还有我们的双向循环链表,工作原理类似。
八、链表衍生
......
相关文章:
03链表+栈+队列(D1_链表(D1_基础学习))
目录 一、什么是链表 二、基本操作 三、为什么要使用链表 四、为什么能够在常数时间访问数组元素 数组优点 数组缺点 五、动态数组诞生 链表优点 链表缺点 六、链表、数组和动态数组的对比 七、 链表种类 1. 单向链表 2. 双向链表 3. 循环链表 八、链表衍生 ...…...
Git 出现 Please use your personal access token instead of the password 解决方法
目录 前言1. 问题所示2. 原理分析3. 解决方法前言 1. 问题所示 执行Git提交代码的时候,出现如下所示: lixiaosong@IT07 MINGW64 /f/java_project/JavaDemo (master) $ git push -u origin --all libpng warning: iCCP: known incorrect sRGB profile libpng warning...
AI大模型开发原理篇-1:语言模型雏形之N-Gram模型
N-Gram模型概念 N-Gram模型是一种基于统计的语言模型,用于预测文本中某个词语的出现概率。它通过分析一个词语序列中前面N-1个词的出现频率来预测下一个词的出现。具体来说,N-Gram模型通过将文本切分为长度为N的词序列来进行建模。 注意:这…...
STM32新建不同工程的方式
新建工程的方式 1. 安装开发工具 MDK5 / keil52. CMSIS 标准3. 新建工程3.1 寄存器版工程3.2 标准库版工程3.3 HAL/LL库版工程3.4 HAL库、LL库、标准库和寄存器对比3.5 库开发和寄存器的关系 4. STM32CubeMX工具的作用 1. 安装开发工具 MDK5 / keil5 MDK5 由两个部分组成&#…...
【Rust自学】14.5. cargo工作空间(Workspace)
喜欢的话别忘了点赞、收藏加关注哦,对接下来的教程有兴趣的可以关注专栏。谢谢喵!(・ω・) 14.4.1. 为什么需要cargo workspace 假如说我们构建了一个二进制crate,里面既有library又有库。随着项目规模不断增长&#…...
全面了解 Web3 AIGC 和 AI Agent 的创新先锋 MelodAI
不管是在传统领域还是 Crypto,AI 都是公认的最有前景的赛道。随着数字内容需求的爆炸式增长和技术的快速迭代,Web3 AIGC(AI生成内容)和 AI Agent(人工智能代理)正成为两大关键赛道。 AIGC 通过 AI 技术生成…...
10.3 LangChain实战指南:解锁大模型应用的10大核心场景与架构设计
LangChain实战指南:解锁大模型应用的10大核心场景与架构设计 关键词: LangChain使用场景、LLM应用案例、检索增强生成、智能体开发、知识库问答 一、LangChain场景全景图:从简单到复杂的应用分层 #mermaid-svg-nzjpyXIPLzL0j3PG {font-family:"trebuchet ms",ver…...
Swing使用MVC模型架构
什么是MVC模式? MVC是一组英文的缩写,其全名是Model-View-Controller,也就是“模型-视图-控制器”这三个部分组成。这三个部分任意一个部分发生变化都会引起另外两个发生变化。三者之间的关系示意图如下所示: MVC分为三个部分,所以在MVC模型中将按照此三部分分成三…...
设计新的 Kibana 仪表板布局以支持可折叠部分等
作者:来自 Elastic Teresa Alvarez Soler, Hannah Mudge 及 Nathaniel Reese 在 Kibana 中构建可折叠仪表板部分需要彻底改造嵌入式系统并创建自定义布局引擎。这些更新改进了状态管理、层次结构和性能,同时为新的高级仪表板功能奠定了基础。 我们正在开…...
修改maven的编码格式为utf-8
1.maven默认编码为GBK 注:配好MAVEN_HOME的环境变量后,在运行cmd. 打开cmd 运行mvn -v命令即可. 2.修改UTF-8为默认编码. 设置环境变量 变量名 MAVEN_OPTS 变量值 -Xms256m -Xmx512m -Dfile.encodingUTF-8 3.保存,退出cmd.重新打开cmd 运行mvn -v命令即可. 源码获取&…...
解锁罗技键盘新技能:轻松锁定功能键(罗技K580)
在使用罗技键盘的过程中,你是否曾因 F11、F12 功能键的默认设置与实际需求不符而感到困扰? 别担心,今天就为大家分享一个简单实用的小技巧 —— 锁定罗技键盘的 F11、F12 功能键,让你的操作更加得心应手! 通常情况下…...
HTB:Active[RE-WriteUP]
目录 连接至HTB服务器并启动靶机 信息收集 使用rustscan对靶机TCP端口进行开放扫描 将靶机TCP开放端口号提取并保存 使用nmap对靶机TCP开放端口进行脚本、服务扫描 使用nmap对靶机TCP开放端口进行漏洞、系统扫描 使用nmap对靶机常用UDP端口进行开放扫描 使用nmap对靶机…...
[C语言日寄] 源码、补码、反码介绍
【作者主页】siy2333 【专栏介绍】⌈c语言日寄⌋:这是一个专注于C语言刷题的专栏,精选题目,搭配详细题解、拓展算法。从基础语法到复杂算法,题目涉及的知识点全面覆盖,助力你系统提升。无论你是初学者,还是…...
安卓逆向之脱壳-认识一下动态加载 双亲委派(一)
安卓逆向和脱壳是安全研究、漏洞挖掘、恶意软件分析等领域的重要环节。脱壳(unpacking)指的是去除应用程序中加固或保护措施的过程,使得可以访问应用程序的原始代码或者数据。脱壳的重要性: 分析恶意软件:很多恶意软件…...
Nuxt:利用public-ip这个npm包来获取公网IP
目录 一、安装public-ip包1.在Vue组件中使用2.在Nuxt.js插件中使用public-ip 一、安装public-ip包 npm install public-ip1.在Vue组件中使用 你可以在Nuxt.js的任意组件或者插件中使用public-ip来获取公网IP。下面是在一个Vue组件中如何使用它的例子: <template…...
babylon.js-3:了解STL网格模型
网格模型上色 本篇文章主要介绍如何在 BabylonJS 中实现STL网格模型上色。 文章目录 网格模型上色运用场景概要延申正文加载器库的支持认识 OBJ 和 STL 文件GUI 色板选择器网格模型异步加载加载动画网格模型上色官方即将弃用 ImportMesh 而推荐使用 ImportMeshAsync 说明OBJ …...
基于SpringBoot的假期周边游平台的设计与实现(源码+SQL脚本+LW+部署讲解等)
专注于大学生项目实战开发,讲解,毕业答疑辅导,欢迎高校老师/同行前辈交流合作✌。 技术范围:SpringBoot、Vue、SSM、HLMT、小程序、Jsp、PHP、Nodejs、Python、爬虫、数据可视化、安卓app、大数据、物联网、机器学习等设计与开发。 主要内容:…...
【MySQL】初始MySQL、库与表的操作
目录 基本使用 使用案例 SQL分类 存储引擎 库的操作 字符集和校验规则 查看系统默认字符集和校验规则 查看数据库支持的字符集 查看数据库支持的字符集校验规则 指定编码常见数据库 校验规则对数据库的影响 操纵数据库 库的备份与恢复 表的操作 创建表 查看表 …...
将DeepSeek接入Word,打造AI办公助手
最近,DeepSeek热度一路高涨,成为AI领域的焦点。通过开放的API,我们可以将DeepSeek接入Word,直接进行AI对话。更进一步,还能利用DeepSeek辅助修改文档,甚至提出一些排版建议。 Word报告工具已经新增“DeepS…...
Coze,Dify,FastGPT,对比
在当今 AI 技术迅速发展的背景下,AI Agent 智能体成为了关键领域,Coze、Dify 和 FastGPT 作为其中的佼佼者,各有千秋。 平台介绍 - FastGPT:由环界云计算公司发起,是基于大语言模型(LLM)的开源…...
CORP开源协作框架:从人治到规则驱动的自动化协作协议
1. 项目概述:一个面向未来的开源协作框架最近在折腾一个开源项目,叫CORP,全称是“Collaborative Open-source Resource Platform”。这名字听起来挺唬人,但说白了,它想解决的就是开源世界里一个老生常谈但又一直没被彻…...
02数据模型与单词仓库-鸿蒙PC端Electron开发
欢迎加入开源鸿蒙PC社区 https://harmonypc.csdn.net/ 源码仓库 https://atomgit.com/qq_33247427/englishProject.git 效果截图 第2篇:数据模型与单词仓库 系列教程导航 篇号 标题 状态 01 环境搭建与项目创建 ✅ 已完成 02 数据模型与单词仓库 本篇 …...
AI-Native数据分析:43 次工具调用,蒸馏成 1 张可复用的知识卡片
很多人最近都在聊 AI-native 工作流, 也在聊"蒸馏"自己的知识库. 但聊得多, 真正落地的人少 —— 因为大家手里的 AI 工具大多停留在 "AI-enabled" 阶段: 一次性问答工具, 用完即弃, 每次重新对一遍口径.这篇文章想用一条真实的 InfiniSynapse 任务回放, 把…...
用STM32CubeMX和HAL库驱动MG90S舵机:从PWM原理到代码实现的保姆级教程
用STM32CubeMX和HAL库驱动MG90S舵机:从PWM原理到代码实现的保姆级教程 第一次接触舵机控制时,我被那个小小的MG90S迷住了——它居然能精确地转动到指定角度!但当我真正开始用STM32控制它时,才发现PWM参数配置的坑比想象中多得多。…...
别再只用GitHub了!手把手教你用GitLab搭建团队专属代码仓库(从群组到项目实战)
别再只用GitHub了!手把手教你用GitLab搭建团队专属代码仓库(从群组到项目实战) 在开源生态中,GitHub无疑是代码托管平台的代名词。但对于需要私有化部署和精细权限控制的团队而言,GitLab提供了更完整的DevOps解决方案。…...
【Instagram内容工业化生产】:ChatGPT + Canva + Notion三件套实战手册(含私有化部署Prompt库下载权限)
更多请点击: https://intelliparadigm.com 第一章:Instagram内容工业化生产的底层逻辑与范式迁移 Instagram内容工业化生产已从个体化、灵感驱动的创作模式,转向数据闭环、模块化协同与AI增强的系统工程。其底层逻辑根植于三重耦合ÿ…...
基于GitHub Webhook的自动化协作平台:Octopal架构设计与实现
1. 项目概述:一个面向开发者的开源协作平台最近在GitHub上看到一个挺有意思的项目,叫“pmbstyle/Octopal”。光看名字,你可能会联想到“Octopus”(章鱼)和“GitHub”(其吉祥物是章鱼猫Octocat)&…...
嵌入式产品如何通过RTOS选型抢占市场先机
1. 项目概述:为什么“上市时机”是嵌入式产品的生死线在嵌入式系统开发这个行当里摸爬滚打了十几年,我见过太多团队把“功能实现”和“性能达标”作为项目的终极目标,却在一个更根本的问题上栽了跟头:上市时机。你可能觉得&#x…...
对比直接使用官方 API,Taotoken 在批量处理任务中的用量可视化优势
🚀 告别海外账号与网络限制!稳定直连全球优质大模型,限时半价接入中。 👉 点击领取海量免费额度 对比直接使用官方 API,Taotoken 在批量处理任务中的用量可视化优势 当开发团队或个人开发者需要处理大量文本生成任务时…...
2026.5.12:三台服务器,一台fastapi的websocket服务接口,一台代理fastapi服务的nginx,一台代理上一个nginx,能穿透websocket吗?
三台服务器,一台fastapi的websocket服务接口,一台代理fastapi服务的nginx,一台代理上一个nginx,能穿透websocket吗? 环境: - 三台服务器 1. 一台fastapi中有websocket接口的服务器:43.226.44.50 2. 一台代理上面1里面的fastapi服务的nginx:43.226.44.184 3. 一台代…...
