顺序表和链表由于存储结构上的差异,导致它们具有不同的特点,适用于不同的场景。通过系统地学习顺序

表和链表我们知道,虽然它们同属于线性表,但数据的存储结构有本质的不同。

• 顺序表存储数据,需预先申请一整块足够大的存储空间,然后将数据按照次序逐一存储,数据之间紧密贴合,不留一丝空隙

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

开辟空间方式

顺序表存储数据实行的是 “一次开辟,永久使用”,即存储数据之前先开辟好足够的存储空间,空间一旦开辟后期无法改变大小(使用动态数组的情况除外)。

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

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

空间利用率

从空间利用率的角度上看,顺序表的空间利用率显然要比链表高。
这是因为,链表在存储数据时,每次只申请一个节点的空间,且空间的位置是随机的。


这种申请存储空间的方式会产生很多空间碎片,一定程序上造成了空间浪费。不仅如此,由于链表中每个数据元素都必须携带至少一个指针,因此,链表对所申请空间的利用率也没有顺序表高。

时间复杂度

根据顺序表链表存储结构上的差异,问题类型主要分为以下 2 类:

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

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

第 1 类问题适合使用顺序表。这是因为,顺序表中存储的元素可以使用数组下标直接访问,无需遍历整

个表,因此使用顺序表访问元素的时间复杂度为 O(1);而在链表中访问数据元素,需要从表头依次遍

历,直到找到指定节点,花费的时间复杂度为 O(n);

第 2 类问题则适合使用链表。链表中数据元素之间的逻辑关系靠的是节点之间的指针,当需要在链表中

某处插入或删除节点时,只需改变相应节点的指针指向即可,无需大量移动元素,因此链表中插入、删除或

移动数据所耗费的**时间复杂度为 O(1);**而顺序表中,插入、删除和移动数据可能会牵涉到大量元素的整

体移动,因此时间复杂度至少为 O(n);

数据结构中链表和列表的区别相关推荐

  1. 数据结构中存储和存取的区别

    复习数据结构的时候遇到了这两个词,就想着记录一下,因为我起初有点混淆了emmm-- 一.存取结构 存取偏向于"取". 存取结构分为顺序存取和随机存取. *顺序存取:不能通过下标访问 ...

  2. 堆(概念,数据结构中堆与内存堆区的区别 ,堆的基本操作)

    堆的特性: 必须是完全二叉树 用数组实现 任一结点的值是其子树所有结点的最大值或最小值 最大值时,称为"最大堆",也称大根堆: 在完全二叉树中,任何一个子树的最大值都在这个子树的根 ...

  3. 数据结构中堆栈和内存堆栈的区别

    最近接触数据结构中的堆栈,想到了初学Java时,关于新实例化或者定义一个对象时候,声明对象,对象的变量名存放在栈内存中,当我们手动new之后,就会在堆内存中开辟一个空间,用来存放变量地址值,并将变量地 ...

  4. R语言将多个dataframe数据添加在列表(list)结构中并进行列表dataframe的索引:包含dataframe的列表、包含dataframe的列表的索引

    R语言将多个dataframe数据添加在列表(list)结构中并进行列表dataframe的索引:包含dataframe的列表.包含dataframe的列表的索引 目录

  5. 什么是内存中的堆和栈?与数据结构中的堆和栈有什么区别?

    内存中的堆和栈 一直使用堆和栈的相关概念,对内存中(操作系统)中的堆与栈和数据结构中的堆与栈一直不求甚解,这次,突然想起这个问题,在此进行一个简单梳理归纳,如有错误,恳请读者指出. 栈(stack) ...

  6. 图解:数据结构中的6种「树」,柠檬问你心中有数吗?

    数据结构这门课程是计算机相关专业的基础课,数据结构指的是数据在计算机中的存储.组织方式. 我们在学习数据结构时候,会遇到各种各样的基础数据结构,比如堆栈.队列.数组.链表.树...这些基本的数据结构类 ...

  7. 记录-链表头插尾插区别

    链表作为数据结构中比较重要的一种,具有操作效率高.内存利用率高.结构简单.使用方便等特点,今天我们一起交流一下单向线性表的头插法和尾插法的区别及优缺点 线性表因为每个元素都包含一个指向下一元素的指针, ...

  8. 数据结构中的有序和无序

    数据结构中的有序和无序 文章开头首先感谢正在学C++博主 个人最起始的迷惑 我的迷惑来自有序列表这个名词. 在我的印象中有序的数据结构是可以保留插入顺序的一种数据结构.而无序则是指在插入数据时进行了排 ...

  9. 数据结构中堆、栈和队列的理解

    一.堆 堆是一种经过排序的树形数据结构,每个节点都有一个值,通常我们所说的堆的数据结构是指二叉树.所以堆在数据结构中通常可以被看做是一棵树的数组对象.而且堆需要满足一下两个性质: (1)堆中某个节点的 ...

最新文章

  1. 人工智能共享停车走向全球
  2. oracle的39082,ORA-39082 导入数据遇到的问题
  3. dbc数据库 与 mysql_使用反应式关系数据库连接规范R2DBC操作MySQL数据库
  4. python词云cannot open resource_centos flask验证码pil提示OSError: cannot open resource,问题解决方法...
  5. asp.net core源码飘香:Options组件
  6. hibernate数据类型_Hibernate类型初学者指南
  7. web可用性测试_Web开发人员和设计人员的最佳可用性测试工具
  8. 精通Android自定义View(八)绘制篇Canvas分析之绘制文本
  9. Tomcat的startup.bat启动闪退解决办法
  10. docker安装tomcat8
  11. php运行方式isapi,PHP_WINDOWS 2000下使用ISAPI方式安装PHP,使用ISAPI方式安装PHP。 下载连 - phpStudy...
  12. unity如何实现图片透视_实战 | 自己实现扫描全能王
  13. 这一年,我所阐释的Linux哲学
  14. archlinux 安装chrome浏览器
  15. nginx防止CDN大量回源
  16. c语言path环境变量,Windows下PATH等环境变量详解(转载)
  17. 黑鲨helo支持html吗,黑鲨Helo的实用功能有哪些 黑鲨Helo的使用技巧
  18. Base64的编码(Encode)与解码(Decode)
  19. 如何实现select * exclude column
  20. 开放redis指定端口连接方法

热门文章

  1. 类指数级数(指数积分函数的变体)数值计算算法的C++实现
  2. STM32-IO方向设置
  3. Redis主从同步数据详解
  4. 解决setTimeout 计时器重复调用的问题导致执行加速问题
  5. 《java入门第一季》之面向对象(继承总结)
  6. 想搞个nas (1)
  7. 脚本造成web浏览器运行速度减慢_此页面上的脚本造成web浏览器运行速度减慢.怎么办?...
  8. Java虚拟机(JVM)面试题(2020最新版)
  9. 网易云信音视频能力中台,聚焦银行业数字化转型
  10. asp.net mvc相关开源项目推荐