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

查外链网站装修公司加盟免费

查外链网站,装修公司加盟免费,龙岩公司注册流程,聚名网络科技1. 基于数组的列表这种列表在底层使用数组作为其存储结构。数组是一段连续的内存空间,可以直接通过索引(下标)访问任意位置的元素。核心思想:在内存中分配一块连续的空间,按顺序存放元素。特点:随机访问能力…

1. 基于数组的列表

这种列表在底层使用数组作为其存储结构。数组是一段连续的内存空间,可以直接通过索引(下标)访问任意位置的元素。

核心思想:在内存中分配一块连续的空间,按顺序存放元素。

特点

  • 随机访问能力强:因为内存是连续的,可以通过 基地址 + 索引 * 元素大小 的公式直接计算出任何一个元素的地址,因此访问第 i 个元素的时间复杂度是 O(1)。这是它最大的优势。

  • 内存利用率高:数据本身之外几乎没有额外的内存开销(除了记录容量和当前长度等元信息)。

  • 插入和删除效率低:在列表中间插入或删除一个元素时,需要将该元素之后的所有元素都向后或向前移动一位,以保持连续性。平均时间复杂度为 O(n)

  • 大小固定:传统数组的大小在创建时就已确定。为了解决这个问题,现代编程语言通常实现了动态数组(如 Python 的 list、Java 的 ArrayList、C++ 的 std::vector)。当当前容量不足时,动态数组会自动分配一个更大的新数组(通常是原来的1.5或2倍),并将旧数据拷贝过去。这个扩容操作的时间复杂度是 O(n),但由于其不是频繁发生,均摊下来,追加操作的时间复杂度仍然是 O(1)

常见操作的时间复杂度

操作时间复杂度说明
按索引访问O(1)随机访问
在末尾追加O(1)均摊成本
在开头或中间插入O(n)需要移动后续元素
在开头或中间删除O(n)需要移动后续元素
查找元素O(n)如果无序,需要遍历

2. 链表

这种列表在底层使用一组节点来存储数据,每个节点不仅包含数据本身,还包含一个或多个指向其他节点的指针

核心思想:通过指针将一组零散的内存块串联起来。

常见的链表类型

  • 单向链表:每个节点包含 数据下一个节点的指针 (next)

  • 双向链表:每个节点包含 数据前一个节点的指针 (prev)下一个节点的指针 (next)。这牺牲了少量空间,但换来了更高效的前向遍历和节点删除能力。

  • 循环链表:尾节点的 next 指针指向头节点,形成一个环。

特点

  • 内存不连续:节点可以分散在内存的各个地方,充分利用零散内存。

  • 随机访问效率低:要访问第 i 个元素,必须从头节点开始逐个遍历,时间复杂度为 O(n)

  • 插入和删除效率高只要拿到了要操作位置的节点指针,插入和删除操作只需要修改几个指针的指向,无需移动大量数据。时间复杂度为 O(1)。这是它最大的优势。

  • 大小动态:天生动态,每次添加新元素时才申请内存,没有扩容和拷贝的成本。

常见操作的时间复杂度

操作时间复杂度说明
按索引访问O(n)需要从头遍历
在头部插入/删除O(1)修改头指针和少量节点指针
在尾部插入/删除O(1)对于双向链表;单向链表需要O(n)来找到尾节点
在已知节点后插入O(1)修改指针
删除已知节点O(1)对于双向链表;单向链表需要O(n)来找到前驱节点
查找元素O(n)需要遍历

对比总结:数组列表 vs. 链表

特性基于数组的列表链表
内存布局连续分散(非连续)
随机访问快 (O(1))慢 (O(n))
头部插入/删除慢 (O(n))快 (O(1))
中间插入/删除慢 (O(n))快 (O(1))***
内存开销小(仅需存储数据)大(需额外存储指针)
容量扩展需要扩容和拷贝天然动态,无需预先分配
缓存友好性(局部性原理)低(内存不连续)

*:链表的“快”的前提是你已经拥有了要插入/删除位置的节点指针。如果你是通过索引来定位,那么定位过程本身就是 O(n) 的,整体操作也就变成了 O(n)。


在不同编程语言中的具体实现

  • Python: list 是一种动态数组,不是链表。

  • Java: ArrayList 是基于数组的,LinkedList 是双向链表。

  • C++: std::vector 是动态数组,std::list 是双向链表。

  • JavaScript: Array 在底层实现上更接近于动态数组(虽然规范不限定具体实现)。

如何选择?

  • 选择基于数组的列表,如果:

    • 你需要频繁地按索引随机访问元素。

    • 你的操作大多是在列表的末尾进行添加和删除。

    • 你追求更高的内存效率和缓存性能。

  • 选择链表,如果:

    • 你需要频繁在列表的任意位置(尤其是头部和中间)进行插入和删除。

    • 列表的大小变化非常频繁且不可预测,你不想处理扩容问题。

    • 你不需要频繁的随机访问。

希望这个详细的梳理能帮助你彻底理解“列表”这个核心数据结构!

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

相关文章:

  • 建设网站的目的饮食类信用渭南网站建设
  • 竞价网站做推广wordpress分类页数量
  • 山东网站制作策划广州专业制作网站
  • 长沙专业做网站公司有哪些手游推广平台代理
  • mvc做的网站怎么连接数据库建设银行网站会员有什么用
  • 网站设计机构排名南京企业建站系统模板
  • 永久免费的网站哪个好wordpress中文转拼音
  • php后台网站开发强强seo博客
  • c 网站开发环境成都网站开发外包公司
  • 石家庄网络营销网站推广目前网站开发技术
  • 服装设计有哪些网站技能培训学校
  • 做网线头子的顺序乌海seo公司
  • 用ps怎么做网站效果图wordpress虚拟商场
  • 具有品牌的常州做网站wordpress 获取主题路径
  • 网站开发英文翻译临海市城市建设规划局网站
  • 东莞市建设规划局网站拓客软件排行榜
  • 阜阳营销型网站建设海南网络广播电视台官网
  • 宁波网站制作工具怎样建设智能网站
  • c2c的网站有哪些多说评论插件对网站优化
  • 做自适应网站设计wordpress5.2
  • 做搜狗网站优化排名网络推广方案策划书
  • 购物网站源码下载建立良好的公共秩序教学设计
  • eclipse tomcat 网站开发营销网站流程与步骤
  • 网站备案 座机号码网站开发一般多少钱
  • 网站开发工程师岗位职责要求厦门制作网站企业
  • 网站排名软件优化巴中模板建站价格多少
  • 怎么用百度云做网站空间开个电商公司需要多少钱
  • 2014 个人网站备案织梦网站地图在线生成
  • 网站建设协调机制中融木业网站是那个网站做的
  • 企业网站建设的类型有哪些数字营销公司排名