【2.4】顺序表和链表的比较

顺序表的主要优点

  • 没有使用指针,不用花费额外开销
  • 线性表元素的读访问非常简洁便利

链表的主要优点

  • 无需事先了解线性表的长度
  • 允许线性表的长度动态变化
  • 能够适应经常插入删除内部元素的情况

总结

  • 顺序表是存储静态数据的不二选择
  • 链表是存储动态变化数据的良方

一、顺序表和链表的比较

顺序表

  • 插入、删除运算时间代价 O(n),查找则可常数时间完成
  • 预先申请固定长度的连续空间
  • 如果整个数组元素很满,则没有结构性存储开销

链表

  • 插入、删除运算时间代价 O(1),但找第i个元素运算时间 代价 O(n)
  • 存储利用指针,动态地按照需要为表中新的元素分配存 储空间
  • 每个元素都有结构性存储开销

二、顺序表和链表存储密度

  • n 表示线性表中当前元素的数目,
  • P 表示指针的存储单元大小(通常为 4 bytes)
  • E 表示数据元素的存储单元大小
  • D 表示可以在数组中存储的线性表元素的最大数目

空间需求:

  • 顺序表的空间需求为 DE
  • 链表的空间需求为 n(P + E)

n 的临界值,即 n > DE / (P+E)

  • n 越大,顺序表的空间效率就更高
  • 如果P = E,则临界值为 n = D / 2

三、应用场合的选择

顺序表不适用的场合:

  • 经常插入删除时,不宜使用顺序表
  • 线性表的最大长度也是一个重要因素

链表不适用的场合:

  • 当读操作比插入删除操作频率大时,不应选择链表
  • 当指针的存储开销,和整个结点内容所占空间相比其 比例较大时,应该慎重选择

四、顺序表和链表的选择

顺序表:

  • 结点总数目大概可以估计
  • 线性表中结点比较稳定(插入删除少)
  • n > DE / (P + E)

链表:

  • 结点数目无法预知
  • 线性表中结点动态变化(插入删除多)
  • n < DE / (P + E)

五、思考

5.1 顺序表和链表的选择?

  • 结点变化的动态性
  • 存储密度

5.2 一元多项式的表达

参考资料

北京大学 《数据结构与算法》 张铭、赵海燕、宋国杰、黄骏、邹磊、陈斌、王腾

这里是一个广告位,,感兴趣的都可以发邮件聊聊:tiehan@sina.cn
个人公众号,比较懒,很少更新,可以在上面提问题,如果回复不及时,可发邮件给我: tiehan@sina.cn