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

【数据结构】顺序表与链表的区别和各自特点

顺序表与链表的区别

  • 一、结构上
  • 二、使用上
    • 随机访问
    • 在随机位置插入删除
    • 空间利用率
    • 缓存利用率
  • 应用场景

一、结构上

顺序表:
顺序表的内核是一个数组,所以顺序表在逻辑上,和在物理上都是线性的。
链表:
链表是通过一个个独立的空间链接在一起,所以链表在逻辑上是线性的,而物理上不是线性的。

二、使用上

随机访问

当我们要随机访问元素时,顺序表和链表的侧重点是不同的。
顺序表:
可以直接通过下标访问,所以时间复杂度是O(1)
链表:
没有下标,所以只能通过遍历链表来找,所以时间复杂度是O(N)

在随机位置插入删除

顺序表:
因为顺序表是一个连续的空间,所以如果要插入或者删除,我们需要对其他元素进行移动,时间复杂度是O(N)
链表:
链表的插入删除很简单,只用改变指针的指向就行了,时间复杂度是O(N)

空间利用率

顺序表:
因为内核是数组,所以当空间不够时要开辟空间,一般每次开辟两倍,很容易会出现空间上的浪费,而且当需要开辟空间特别多时很容易开辟失败。
链表:
链表每个节点都可以存在不同的位置,随用随开,空间利用率高。

缓存利用率

首先要明白缓存是如果读取数据的
我们电脑中数据的读取是分内存和缓存的,缓存的传输速度是比内存快的当我们在程序中调用某一数据时,会先从缓存中找,若在缓存中找到了就会很快,不用再从内存中找,这个叫做缓存命中
在这里插入图片描述
而缓存从内存中查找数据时,通常会将与要取出的数据后的一串数都取出,例如数组缓存一次查找就会将数组中的所有数据都取出,而在取链表中的数据时,每一次调用其中一个节点时就会将节点后面的一串数据取到缓存,这样缓存中会就会有一些无用的数,造成缓存污染

顺序表:
缓存利用率高
链表:
缓存利用率低

应用场景

顺序表:
需要快速存储大量数据时,用顺序表,因为顺序表一次开辟就可以用好久,而且可以一次开辟很大空间。
当需要频繁访问时数组的下标可以给我们提供便利。
链表:
当需要在任意位置插入删除时,链表只用改变指针。


http://www.kler.cn/news/361875.html

相关文章:

  • elementUI进度条el-progress不显示白色
  • KMP 算法
  • C/C++函数调用约定:__cdecl、__stdcall、__fastcall和__thiscall
  • spring源码中的,函数式接口,注解@FunctionalInterface
  • flask 接口还在执行中,前端接收到接口请求超时,解决方案
  • 【Linux】了解pthread线程库,清楚并没有线程创建接口,明白Linux并不存在真正意义的线程(附带模型图详解析)
  • 数据结构-贪心算法笔记
  • MAC电脑的JDK、MAVEN配置及IDEA激活
  • Vehicle Spy3.9如何新建工程—Setup network Database
  • 基于SpringBoot中药材进存销管理系统【附源码】
  • C++基础(10. map_set 的使用)
  • 深入探索路由算法的核心原理与应用
  • ESlint代码规范
  • 基于PHP的减脂轻食购物网站【附源码】
  • 注册_登录安全分析报告:宝马中国
  • Vue学习笔记 Class绑定 Style绑定 侦听器 表单输入绑定 模板引用 组件组成 组件嵌套关系
  • concurrently 库作用
  • 如何让别人喜欢你的代码
  • VSCode生成HTML标准结构,使用VSCode进行提前设置为zh-CN
  • Disconnected from the target VM
  • C语言高效内存管理:对齐、缓存与位域
  • 智能升级:机器人焊钳修磨机VS传统修磨机,效率与质量的双重飞跃
  • 听泉鉴宝在三个月前已布局商标注册!
  • Bitcoin全节点搭建
  • set笔记
  • 酒店预订订房小程序源码系统 多酒店入驻+打造类似美团的酒店模式 带完整的安装代码包以及搭建部署教程