数据结构学习笔记——顺序表和链表的比较

来源:互联网 发布:黑暗之魂3捏御姐数据 编辑:程序博客网 时间:2024/06/05 09:15

顺序表和链表各有优缺点


顺序表的优点

  1. 方法简单,各种高级语言中都有数组,容易实现。
  2. 不用为表示结点间的逻辑关系而增加额外的存储开销(链表要增加额外的指针域)。
  3. 顺序表具有按元素序号随机访问的特点。

缺点

  1. 在顺序表中做插入删除操作时,平均移动大约表中一般的元素,因此对n较大的顺序表效率低。
  2. 需要预先分配足够大的存储空间,估计过大,可能会导致顺序表后部大量闲置;预先分配过小,又会造成溢出。

链表的优缺点恰好和顺序表相反。

链表和顺序表的插入、删除操作时间复杂度O(n)是两个不同的概念,链表O(n)主要是花费在查找上,顺序表O(n)主要花费在移动元素上,两者没有可比性。


在实际中应怎样选择存储结构?

1. 基于存储的考虑
顺序表在程序执行之前必须明确规定它的存储规模,也就是说事先对“MAXSIZE”要有合适的设定,过大造成浪费,过小造成溢出。可见对线性表的长度或存储规模难以估计时,不宜采用顺序表;
链表不用事先估计存储规模但链表的存储密度较低,顺序存储结构存储密度是1,链式存储结构的存储密度是小于1的。
2. 基于运算的考虑
在顺序表中按序号访问ai的时间性能是O(1),而链表中按序号访问的时间性能是O(n),所以如果经常做的运算是按序号访问数据元素,显然顺序表优于链表;而在循序表中做插入、删除操作时平均移动表中一半的元素,当数据元素的信息量较大且表较长时,这一点是不应忽视的;在链表中做插入、删除,虽然也要找插入位置,但操作主要是比较操作,从这个角度考虑显然链表优于顺序表。
3. 基于环境的考虑
顺序表容易实现,任何高级语言中都有数组类型,链表的操作是基于指针的,相对来讲前者简单些。

总之,顺序表和链表没有绝对的优劣之分,两种存储结构各有长短,关键看你看重什么,也就是要依据实际问题中的主要因素而定。通常“较稳定”的线性表选择顺序存储,而频繁做插入删除操作的,即动态性较强的线性表适合用链式存储。

0 0