线性表的链式存储结构与顺序存储结构(链表和数组)的区别及优缺点

线性表的链式存储结构与顺序存储结构(链表和数组)的区别及优缺点

参照《大话数据结构》整理:

顺序存储结构:

优点:

  • 无须为表示表中元素之间的逻辑关系而增加额外的存储空间
  • 可以快速的存取表中任一位置的元素 O(1)

缺点:

  • 插入和删除操作需要移动大量元素 O(n)
  • 当线性表长度变化较大时,难以确定存储空间的容量
  • 造成存储空间的“碎片”

二者对比

存储分配方式
顺序存储结构 用一段连续的存储单元依次存储线性表的数据元素
单链表 采用链式存储结构,用一组任意的存储单元存放线性表的元素
时间性能 查找 插入和删除
顺序存储结构 O(1) 需要平均移动表长一半的元素 O(n)
单链表 O(n) 在找出某位置的指针后,插入和删除的时间复杂度为 O(1)
空间性能
顺序存储结构 需要预分配存储空间,分大了->浪费,分小了->易发生上溢
单链表 不需要分配存储空间,只要有就可以分配,元素个数也不受限制

适用场景:

  • 数组: 元素个数变化不太大,需要频繁查找(存取),很少进行插入和删除操作时。
  • 链表: 元素个数变化较大或者根本不知道有多大时,插入或删除数据频繁,


之前整理的,与前文意思相同,但上文更精炼 -> 以下可不看

​ 区别:
​ (1)内存:数组静态分布内存,链表动态分布内存;
​ 数组在内存中是连续的,链表不连续;
​ (2)复杂度:
​ ①查找时:
​ 数组利用索引定位,查找的时间复杂度是O(1),
​ 链表通过遍历定位元素,查找的时间复杂度是O(n);
​ ② 插入和删除:
​ 数组插入和删除要移动其他元素, 时间复杂度是O(n),
​ 链表的插入和删除不需要移动其他元素, 时间复杂度是O(1);
数组的优缺点:
​ (1)优点:
​ 复杂度: 随机访问性比较强,可以通过下标进行快速定位。查找速度快
​ (2)缺点:
​ 内存: ①会造成内存的浪费. 因为内存是连续的,所以在创建数组的时候必须规定其大小,如果不合适,就会造成内存的浪费。
​ ②内存空间要求高. 创建一个数组,必须要有足够的连续内存空间。
​ ③数组的大小是固定的,在创建数组的时候就已经规定好,不能动态拓展, 如果要扩容, 需要重新分配一块更大的空间, 再把所有数据全部复制过去.
​ 复杂度: ④插入和删除的效率低,需要移动其他元素。
链表的优缺点:
​ (1)优点:
​ 内存: ①内存利用率高,不会浪费内存,可以使用内存中细小的不连续的空间,只有在需要的时候才去创建空间。大小不固定,拓展很灵活。
​ 复杂度: ②插入和删除的效率高,只需要改变指针的指向就可以进行插入和删除。
​ (2)缺点:
​ 内存: ①由于每个元素必须存储指向前后元素位置的指针, 会消耗相对更多的存储空间.
​ 复杂度: ②查找的效率低,因为链表是从第一个节点向后遍历查找。

猜你喜欢

转载自blog.csdn.net/weixin_46644403/article/details/120683688