链表和顺序表比较

#存取(读写)方式

  • 链表仅支持顺序存储,只能从头节点开始访问数据
  • 顺序表支持随机存储,可通过下标直接访问任意数据,也支持顺序存储
  • #逻辑结构与物理结构

  • 顺序存储中,逻辑上相邻的元素物理内存中也相邻存放
  • 链式存储中,逻辑上相邻的元素物理内存中未必相邻,逻辑关系通过指针显式维护
  • #查找,插入和删除操作

  • 按值查找:表若无序,时间复杂度均为O(n);表若有序,顺序表可以折半查找,时间复杂度O(log2 n)。
  • 对于按序号查找:顺序表的时间复杂度为O(1),链表则为O(n)。
  • 对于插入/删除操作:顺序表平均需要移动约一半元素,开销较大。链表在元素节点已知的情况下,只需修改指针,无需移动,但是非已知情况,则仍需O(n)
  • #空间分配

  • 顺序表无论是静态分配可能分配空间过多,造成空间浪费,动态分配需要申请新的连续内存块,且复制原有数据,也有可能无法申请到足够空间而失败,时间开销大。
  • 链表则足够灵活,但每个节点需要额外存储指针域,导致存储密度小于1,空间利用率较低。