顺序表和链表的优缺点总结

时间:2025-02-15 10:24:51

顺序表和链表的优缺点总结

  • 引言
    • 顺序表
    • 链表
  • 一、两者的优缺点
    • 1. 顺序表的优点
    • 2. 顺序表的缺点
    • 3. 链表的优点
    • 4. 链表的缺点
  • 二、按照三个角度看待问题

引言

顺序表和链表都属于线性表,它们都是用来存储数据的结构。
线性表:零个或多个数据元素的有限序列。
顺序表即表示线性表的顺序存储,链表即表示线性表的链式存储。

顺序表

顺序表:顺序表底层是一个数组,它在逻辑上和物理结构上都是连续的。因为我们可以按照下标进行各种操作,每个元素都是连续存放的。

顺序表按位查找的时间复杂度为:O(1)
顺序表按值查找的时间复杂度为:O(n)
中间插入、中间删除的时间复杂度为:O(n)
头插、头删的时间复杂度为:O(n)
尾插、尾删的时间复杂度为:O(1)

链表

链表:链表是一个由若干节点组成的结构,它在逻辑上是连续的,但在物理结构上是非连续的,或者说,内存上不是紧挨着的。

链表按位查找的时间复杂度为:O(n)
链表按值查找的时间复杂度为:O(n)
链表在找到指定元素的位置后,插入和删除操作的时间复杂度为:O(1)

单链表在插入和删除操作时,需要找到前驱域,这也是较为麻烦的。
而双向链表的插入和删除操作效率就较为高效,因为双向链表中的每个节点不仅存储了后继域,也存储了前驱域。但显然,双向链表是利用了更多的空间换取了时间。

一、两者的优缺点

1. 顺序表的优点

顺序表可以通过索引(下标)快速地存、取表中元素。

2. 顺序表的缺点

① 顺序表的插入和删除操作,会使得表中的大量元素进行移动,效率较低。

② 顺序表在面对扩容问题的时候,比较繁琐。当顺序表放满的时候,我们需要进行扩容。而扩容的大小需要面对不同的情况,若扩容的容量较大,那么会使得空间利用率较低;若扩容的容量较小,在后续的代码执行过程中,又需要不断地扩容操作,这使得代码变得更加繁琐。

3. 链表的优点

① 链表的插入和删除操作的效率较高,可以把通过指针 (地址) 直接改变节点的指向。
② 链表不需要考虑扩容问题。

4. 链表的缺点

链表在查找元素的时候,执行效率较低,需要从头开始,依次往后找。

二、按照三个角度看待问题

1. 基于存取方式

顺序表可以顺序存取,也可以随机存取;链表只能从表头开始往后顺序存取元素。

2. 基于查找方式

顺序表按照位序查找的时间复杂度为 O(1);链表按照位序查找的时间复杂度为 O(n).

3. 基于插入和删除的方式

一般来说,顺序表的插入和删除需要挪动大量元素,时间复杂度为 O(n);链表需要从表头遍历找到待操作的元素位置的前驱,时间复杂度也为 O(n),但是链表在找前驱的位置时,主要是遍历操作,此外,链表在找到元素前驱的位置之后,插入和删除操作的时间复杂度只为 O(1),效率极高。所以这样比较来看,链表的插入和删除操作效率显然要比顺序表的插入和删除操作要高!

综上所述:

① 若我们存储数据的时候,在后续的操作中,需要对数据进行频繁查找,很少进行插入和删除操作时,宜采用顺序表。

② 若我们存储数据的时候,无法确定数据个数的变化,此外使用插入和删除的操作较频繁时,宜采用链表。