当前位置: 首页 > news >正文

链表和数组

一、Python 中的“数组”与“链表”的实现区别

类型Python 中的对应实现底层结构备注
数组listarray.array连续内存块(C 数组)list 是动态数组,可自动扩容
链表需自定义 Node非连续内存块(通过指针连接)Python 默认没有内建链表,只能自己实现单链表 / 双链表
class Node:def __init__(self, val):self.val = valself.next = None

二、各操作的时间复杂度对比

操作数组(Python list)链表(单/双向)说明
按索引访问 a[i]🟩 O(1)🔴 O(n)数组支持随机访问,链表需遍历
按值查找 x in a🔴 O(n)🔴 O(n)都需遍历
在末尾插入 append()🟩 O(1)* 均摊🟩 O(1)数组可能触发扩容;链表只需改尾指针
在头部插入🔴 O(n)🟩 O(1)数组需移动所有元素
在中间插入🟠 O(n)🟠 O(n)都需遍历到插入位置;数组还要搬移元素
删除末尾元素 pop()🟩 O(1)🟩 O(1)简单修改尾指针
删除头部元素🔴 O(n)🟩 O(1)数组需搬移剩余元素
删除中间元素🟠 O(n)🟠 O(n)需遍历定位;数组还要移动剩余元素
遍历全部元素🟩 O(n)🟩 O(n)基本相同
随机插入/删除多个元素🟠 O(n²)🟠 O(n²)都较慢,但链表避免了大规模搬移
扩容成本⚠️ O(n)(偶发)动态数组需偶尔重新分配内存

三、空间复杂度对比

项目数组(list)链表
存储数据O(n)O(n)
额外开销O(1)O(n)(每个节点需存放指针)
空间局部性优(连续)差(分散)
  • 数组 内存连续、空间利用率高,但扩容时需要一次性分配更大的内存。

  • 链表 每个节点需额外存放指针,导致 内存占用更高缓存性能较差

四、Python 实际表现说明

当数组空间满了:

  1. Python 会申请一块 更大的新内存(通常是原容量的约 1.125~2 倍)。

  2. 然后将旧数组中的所有元素 逐个复制到新内存中

  3. 最后释放旧的那块内存。

  • Python 的 list 是一个 动态数组,在底层是通过 预分配空间 + 按需扩容 实现的。

  • 因此 append() 平均为 O(1),偶尔触发扩容时为 O(n)

  • Python 没有原生链表,但 collections.deque(双端队列)在某些场景下可视为“高效链表结构”:

    • 头尾插入、删除:O(1)

    • 随机访问:O(n)

http://www.dtcms.com/a/471805.html

相关文章:

  • 做美食介绍的网站设计公司logo免费
  • 佛山网站建设十年乐云seowordpress 注册 地址
  • 网站设计与规划找人做网站应该注意什么
  • 企业网站的功能有哪些昆明网站建设推荐力鼎科技
  • Vue定义全局弹窗组件,使其在满足某种条件情况下弹出
  • 开发文档规范
  • 合肥 电子商务 网站推广wordpress 循环两个交替
  • 12306网站哪个公司做的wordpress 3.9 编辑文章 固定链接 不能编辑
  • 网站方案设计做不做生意都要知道的网站
  • 频率在空间上的投射
  • 网站建设的相关知识c 网站开发简单实例
  • 【避坑】键值存储分解技术的局限性
  • 瑞丽企业网站建设各网站封面尺寸
  • 企业网站建站系统网站建设与网页设计课程
  • 毕设做网站怎么弄代码设计工商注册网站
  • 为什么进不了中国建设银行网站wordpress 插件经验
  • 嵌入式学习笔记6.PWM
  • 成都网站建设四川推来客网络手表网站 源码
  • 大型大型网站建设方案ppt大连网站建设动态
  • 网站的推广运营wordpress建设
  • 山东住房建设部网站在线p图网页
  • 哪里需要人做钓鱼网站维力安网站建设公司
  • 备案的网站必须打开吗seo是什么意思揉若湖南岚鸿专注
  • 湖南长信建设集团网站wordpress 怎么改中文字体
  • Kafka11-知识补充
  • 印象网站建设苏州制作网站的有几家
  • 火车票网站建设多少钱交通运输企业标准建设网站
  • 做公众号网站棋牌游戏软件开发公司
  • 钓鱼网站二维码制作软件正邦设计作品
  • 01-Python简介与环境搭建-导读