一. 前言

  顺序表和链表由于存储结构上的差异,导致他们有不同的特点,从而适用于不同的场景。虽然他们都属于线性表,但他们的存储结构有着本质的不同:

  1. 线性表存储数据,需要预先申请一块存储空间,然后将数据按照次序逐一存储,数据之间紧密贴合,不留一丝空隙, 如下图:

  2. 链表的存储方式与顺序表截然相反,什么时候存储数据,什么时候才申请存储空间,数据之间的逻辑关系依靠每个数据元素携带的指针维持,如下图:

二. 开辟空间的方式

1. 顺序表

  存储数据实行的是 "一次开辟,永久使用",即存储数据之前先开辟好足够的存储空间,空间一旦开辟后期无法改变大小。

PS:动态数组的情况除外。

2. 链表

  链表存储数据时一次只开辟存储一个节点的物理空间,如果后期需要还可以再申请。

3. 结论

因此,若只从开辟空间方式的角度去考虑,当存储数据的个数无法提前确定,又或是物理空间使用紧张导致无法一次性申请到足够大小的空间时,使用链表更有助于问题的解决。

三. 空间利用率

从空间利用率的角度上看,顺序表的空间利用率显然要比链表高。这是因为,链表在存储数据时,每次只申请一个节点的空间,且空间的位置是随机的, 如下图,这种申请存储空间的方式会产生很多空间碎片,一定程序上造成了空间浪费。不仅如此,由于链表中每个数据元素都必须携带至少一个指针,因此,链表对所申请空间的利用率也没有顺序表高

PS:空间碎片,指的是某些容量很小(1KB 甚至更小)以致无法得到有效利用的物理空间。

更多C++后台开发技术点知识内容包括C/C++,Linux,Nginx,ZeroMQ,MySQL,Redis,MongoDB,ZK,流媒体,音视频开发,Linux内核,TCP/IP,协程,DPDK多个高级知识点。

C/C++Linux服务器开发高级架构师/C++后台开发架构师​免费学习地址

【文章福利】另外还整理一些C++后台开发架构师 相关学习资料,面试题,教学视频,以及学习路线图,免费分享有需要的可以点击领取

四. 时间复杂度

1. 思考

  解决不同类型的问题,顺序表和链表对应的时间复杂度也不同。根据顺序表和链表在存储结构上的差异,问题类型主要分为以下 2 类:

  (1). 问题中主要涉及访问元素的操作,元素的插入、删除和移动操作极少。

  (2). 问题中主要涉及元素的插入、删除和移动,访问元素的需求很少。

2. 分析和结论

  (1). 第 1 类问题适合使用顺序表。这是因为,顺序表中存储的元素可以使用数组下标直接访问,无需遍历整个表,因此使用顺序表访问元素的时间复杂度为 O(1);而在链表中访问数据元素,需要从表头依次遍历,直到找到指定节点,花费的时间复杂度为 O(n);

  (2). 第 2 类问题则适合使用链表。链表中数据元素之间的逻辑关系靠的是节点之间的指针,当需要在链表中某处插入或删除节点时,只需改变相应节点的指针指向即可,无需大量移动元素,因此链表中插入、删除或移动数据所耗费的时间复杂度为 O(1);而顺序表中,插入、删除和移动数据可能会牵涉到大量元素的整体移动,因此时间复杂度至少为 O(n);

  综上所述,不同类型的场景,选择合适的存储结构会使解决问题效率成倍数地提高。

原文链接:第三节:从多个角度分析顺序表和链表区别和特点 - Yaopengfei - 博客园

从多个角度分析顺序表和链表区别和特点相关推荐

  1. 链表和顺序表的一些区别

    顺序表与链表是非常基本的数据结构,它们可以被统称为线性表. 线性表(Linear List)是由 n(n≥0)个数据元素(结点)a[0],a[1],a[2]-,a[n-1] 组成的有限序列. 顺序表和 ...

  2. 2.6顺序表和链表的优缺点(区别、特点)详解

    顺序表和链表由于存储结构上的差异,导致它们具有不同的特点,适用于不同的场景.本节就来分析它们的特点,让读者明白 "在什么样的场景中使用哪种存储结构" 更能有效解决问题. 通过系统地 ...

  3. python列表和链表的区别_顺序表和链表的区别

    一.从操作上角度 顺序表和链表都具有增.删.查.改的相同功能,但算法复杂度却不相同. (1)增:顺序表往指定位置,不覆盖的添加一个值,后面的值日要往后移动,算法复杂度为O(n):链表往指定位置添加一个 ...

  4. 《数据结构》顺序表与链表

    目录 一.线性表 线性表简介 二.顺序表 1.定义顺序表类 2.功能实现: 打印顺序表 在pos位置新增元素 判定是否包含某个元素 查找某个元素对应的位置 获取pos位置的元素 给 pos 位置的元素 ...

  5. 数据结构 | 顺序表、链表和数组是逻辑结构还是物理(存储)结构?

    1.逻辑结构和物理结构的定义 首先数据结构分为两个层次:逻辑结构 和 物理结构(存储方式) . 逻辑结构是用来描述数据元素之间的逻辑关系,是一个抽象概念,与数据的实际存储无关,独立于计算机存在. 物理 ...

  6. 8.基本数据结构-顺序表和链表

    一.内存 - 计算机的作用:对数据进行存储和运算.首先我们需要知道我们目前使用的计算机都是二进制的计算机,就以为着计算机只可以存储和运算二进制的数据.例如下载好的一部电影,该电影可以存储到计算机中,计 ...

  7. 线性表、顺序表和链表,你还分不清?

    摘要:其实说实话,可能很多人依然分不清线性表,顺序表,和链表之间的区别和联系! 本文分享自华为云社区<程序员必会自己设计线性表(顺序表.链表)>,原文作者:bigsai. 前言 其实说实话 ...

  8. 【顺序表和链表】实现增删查改数据结构 OJ题编程

    目录 线性表 一.顺序表 1.使用顺序表MyArrayList增删查改 MyArrayList.java TestDemo.java 二.链表 1.带头 / 不带头 循环 / 非循环 2.创建链表并访 ...

  9. python列表是顺序表还是链表_Python数据结构与算法(链表使用详解)

    链表 单向链表 p是头节点,指向第一个值,最后一个是伪节点,因为不指向地址. 表元素域elem用来存放具体的数据 链接域next用来存放下一个节点的位置(python中的标识) 变量p指向链表的头节点 ...

最新文章

  1. Rstudio查看关联的R
  2. oracle 按照周 分组
  3. hdu3329 二分+搜索
  4. 在一个TextArea中如何限制行数和字符数
  5. 手写实现Spring(IOC、DI),SpringMVC基础功能
  6. 【UOJ575】光伏元件【网络流建图】【上下界网络流】【费用流】
  7. jquery笔记一:下载安装、语法、选择器、遍历选择元素的方法、jQuery动画
  8. Distributed Representations of Sentences and Documents
  9. sql server 索引阐述系列五 索引参数与碎片
  10. python476集免费教材_476. 数字的补数 | python|python爬虫|python入门|python教程
  11. 数学建模常用算法—模糊综合评价法(FCE)
  12. 音频文件格式解析与编解码
  13. linux怎么保存7天内文件,Linux七天系列(第七天)—文件系统管理
  14. 产品生命周期用户生命周期?
  15. linux无法识别m2固态,主板识别不出m.2固态硬盘怎么办|笔记本电脑无法识别m.2固态硬盘解决方法-系统城...
  16. System.IO.FileSystemWatcher 类
  17. 常见排序算法及其对应的时间复杂度、空间复杂度
  18. CodeForces 1K-1600R-1407C Chocolate Bunny
  19. 2021-2027全球与中国可持续性蛋白质市场现状及未来发展趋势
  20. FISCO-BCOS应用实战:区块链实战应用开发分享

热门文章

  1. java socket 通信协议_java 基于TCP协议的Socket编程和通信
  2. 服务器是不是信息点,机房综合布线信息点安装模式有哪些
  3. 半导体ISO 26262功能安全合规性开发的3P法则(上)
  4. 【转】基于 CPU 实施高效且快速的医疗影像分析
  5. c语言设计模式代码完整实现-状态机模式
  6. 如何设置短信语音播报
  7. Spark开发语言Scala语言
  8. 脑电图(EEG)学习资料汇总:在线视频教程、学习网站、书籍教材
  9. 重塑新时代媒体价值 东软Newsroom融媒体平台发布
  10. 前向传播网络函数forward_network(net)