数组和链表读取、插入、删除以及查找的区别

news/2025/9/24 12:03:59/文章来源:https://www.cnblogs.com/kaoyujiang/p/19108905

数组和链表是两种常见的数据结构,它们在读取、插入、删除操作上有显著差异,下面详细说明:

1. 读取(访问)操作

  • 数组
    数组是连续的内存空间,元素按索引(下标)存储,因此可以通过索引直接访问任意位置的元素,时间复杂度为 O(1)(常数时间)。例如,arr[5] 可以直接定位到第6个元素。

  • 链表
    链表的元素(节点)分散存储在内存中,通过指针中的指针针(指针接)连接。要访问第n个元素,必须从表头开始依次遍历前n-1个节点,时间复杂度为 O(n)(线性时间)。

2. 插入操作

  • 数组

    • 若在末尾插入,时间复杂度为 O(1)(直接追加)。
    • 若在中间或头部插入,需要移动插入位置后的所有元素以腾出空间,时间复杂度为 O(n)(元素越多,移动成本越高)。
    • 此外,数组容量固定(静态数组),满员时插入需要重新分配更大的内存并复制所有元素,成本更高。
  • 链表
    插入时只需修改相邻节点的指针,无需移动其他元素,时间复杂度为 O(1)(前提是已定位到插入位置)。例如,在节点A和节点B之间插入节点C,只需将A的指针指向C,C的指针指向B即可。

3. 删除操作

  • 数组

    • 若删除末尾元素,时间复杂度为 O(1)
    • 若删除中间或头部元素,需要移动删除位置后的所有元素以填补空缺,时间复杂度为 O(n)
  • 链表
    删除时只需修改相邻节点的指针(例如,删除节点B时,将A的指针直接指向C),无需移动其他元素,时间复杂度为 O(1)(前提是已定位到待删除节点的前驱节点)。

4. 查找是否等同于读取?

不完全等同

  • 读取 通常指“根据索引/位置获取元素”(如数组的 arr[i]、链表的第i个节点)。
  • 查找 通常指“根据元素的值找到其位置”,需要遍历数据结构(除非是有序数组可二分查找):
    • 数组查找:顺序遍历为 O(n),有序数组二分查找为 O(log n)
    • 链表查找:只能顺序遍历,时间复杂度为 O(n)

总结

操作 数组(平均情况) 链表(平均情况
读取 O(1) O(n)
插入 O(n) O(1)
删除 O(n) O(1)
查找 O(n) O(n)

数组适合频繁读取、元素数量固定的场景;链表适合频繁插入/删除、元素数量动态变化的场景。

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

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

相关文章

day 09 课程

day 09 课程课程:https://www.bilibili.com/video/BV1o4411M71o/?spm_id_from=333.788.videopod.episodes&p=168 9.1 了解函数———————————————————————————————————————…

在K8S中,日志分析工具有哪些可以与K8S集群通讯?

在Kubernetes中,日志分析工具与集群的通信方式多样,可以根据部署位置和采集方式分为几大类。以下是主流工具的详细分类和介绍: 📊 日志分析工具分类概览 graph TDA[K8S日志分析工具] --> B1[集群内部部署]A --…

在K8S中,网络通信模式有哪些?

好的,这是一个非常核心的问题。Kubernetes 的网络模型是一个复杂的体系,但我们可以将其分解为几个清晰的层次来理解。 Kubernetes 网络通信模式可以分为四大类,下图清晰地展示了这四类通信的全景:A[Kubernetes 网络…

中山网站代运营python nginx做网站

Creator 版本: 3.8.2 目标平台:小游戏开发 压缩后 我不知道别人压缩几百kb是怎么做到的。不过哪个要钱。 我这个技巧不用花钱。 论坛有教程但是没有教详细怎么做。 开整! 做一个空白的场景。然后写一个load脚本。load主场景。 从代码可…

厦门网站建设a建筑设计工资一般多少

TCP客户端数据通信 文章目录 TCP客户端数据通信1、软件准备2、硬件准备3、仿真电路原理图4、仿真代码实现5、仿真结果本文将介绍Arduino在Protues仿真环境中作为TCP客户端,如何与TCP服务器进行数据通信。 1、软件准备 1)Arduino IDE或 VSCode + PlatformIO 2)Proteus电路仿…

一文教你搞定PASS 2025:样本量计算神器安装到使用全流程

软件介绍 PASS 2025 是用于效能分析和样本量估计的统计软件包,它在前版本基础上新增了37项样本量计算程序,涵盖医学研究、社会科学调查、工程实验等多种复杂统计场景。新增的Logrank类检验样本量计算程序,能精准计算…

React 18.2中采用React Router 6.4

React 18.2中采用React Router 6.4pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco&…

题解:AT_abc257_h [ABC257Ex] Dice Sum 2

柿子还是得写在草稿纸上手推。 题意:很简单了,不再赘述。 做法: 首先这个权值有点抽象,我们写出来稍微化简一下。 \[\frac{1}{6^n}\sum_{x_1=1}^6\sum_{x_2=1}^6\cdots\sum_{x_n=1}^6(\sum_{i=1}^na_{i,x_i})^2 - …

ClickHouse UPDATE 机制详解 - 若

ClickHouse UPDATE 机制详解 问题现象 在使用ClickHouse进行UPDATE操作时,经常会遇到这样的现象: UPDATE ethereum.block_tasks SETstatus = pending, owner = consumer-1_1758676754070328000, assigned_at = 2025-…

Jetpack Room 从入门到精通 - 实践

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

网站建设unohacha免费北京网站建设

导言 在 Rust 中,互斥器(Mutex)是一种用于在多个线程之间共享数据的并发原语。互斥器提供了一种安全的方式,允许多个线程访问共享数据,但每次只允许一个线程进行写操作。本篇博客将详细介绍 Rust 中互斥器的使用方法&…

不干胶网站做最好的wordpress关闭

应用场景:一个游戏可能会衍生出其他APP或小程序之类的软件,例如王者营地是王者荣耀的官方APP,王者营地提供资讯、赛事、社区、战绩等功能。所以游戏端会和衍生出来的软件端做一些数据互通。这里把软件端称为中台系统。 Get请求和Post请求的区…

自建个网站怎么做网站建设与管理是干什么的

Windows 下本地 Docker RAGFlow 部署指南 环境要求部署步骤1. 克隆代码仓库2. 配置 Docker 镜像加速(可选)3. 修改端口配置(可选)4. 启动服务5. 验证服务状态6. 访问服务7. 登录系统8. 配置模型8.1 使用 Ollama 本地模型8.2 使用在线 API 服务9. 开始使用10. 常见问题处理端…

ClickHouse index_granularity 详解 - 若

ClickHouse index_granularity 详解 什么是 index_granularity index_granularity 是ClickHouse中一个重要的性能配置参数,它定义了索引的粒度(granularity),即每多少个数据行会创建一个索引标记(index mark)。 …

PADS笔记

PADS笔记PCB设计流程准备--功能确定、元器件选型 元件库建立-元器件符号、器件封装 绘制原理图-根据电路功能,将元器件符号进行连接 导出网络表--将元器件的连接关系,以及元器件的信息导出一个文件,以方便导入到其他…

【2025最新教程】Claude Code国内使用_保姆级新手安装使用教程_最强AI编程工具

【2025最新教程】Claude Code国内使用_保姆级新手安装使用教程_最强AI编程工具什么是 Claude Code Claude Code 是 Anthropic 推出的一个 agentic 编码工具 (agentic coding tool),可以在命令行(terminal)中运行,或…

如何计算sequence粒度的负载均衡损失 - 教程

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

P13885 [蓝桥杯 2023 省 Java/Python A] 反异或 01 串

发现操作完后必定为一个回文串,并且至多消去区间一半数量的 \(1\),求最长回文串即可。

获取网站缩略图的asp代码wordpress的cms主题

防火墙在解决方案及典型项目中的应用 防火墙作为基础安全防护产品,在各种解决方案、业务场景中配套应用,本节给出各类方案资料链接方便查阅。 防火墙在华为网络解决方案中的应用 解决方案 文档 主要应用 CloudFabric云数据中心网解决方案 资料专区…

怎样的网站打开速度块北京房产网二手房出售

这一部分开始,我们将讲解Python中的组合数据类型,这里的知识十分基础而且重要,也已经与C语言的框架愈差愈远。 目录 序列和索引 1、概念 2、切片操作 3、序列的其他操作 列表 1、概念 2、创建与删除 3、列表的操作 4、列表生成式 …