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

简介: 顺序表和链表的优缺点总结

引言



顺序表和链表都属于线性表,它们都是用来存储数据的结构。

线性表:零个或多个数据元素的有限序列。

顺序表即表示线性表的顺序存储,链表即表示线性表的链式存储。


顺序表


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


顺序表查找指定位置的时间复杂度为:O(1)

中间插入、中间删除的时间复杂度为:O(n)

头插、头删的时间复杂度为:O(n)

尾插、尾删的时间复杂度为:O(1)


链表


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


链表查找的时间复杂度为:O(n)

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


单链表在插入和删除操作时,需要找到前驱域,这也是较为麻烦的。


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


一、两者的优缺点



1. 顺序表的优点


(1)顺序表可以通过索引(下标)快速地访问表中元素


2. 顺序表的缺点


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


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


3. 链表的优点


(1)链表的插入和删除操作的效率较高,可以把通过地址直接改变节点的指向。

(2)链表不需要考虑扩容问题。


4. 链表的缺点


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


二、如何选择



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


(2)若我们存储数据的时候,在后续的操作中,我们无法确定数据个数的变化,或者说,数据元素在某次操作中,个数变化较大,宜采用链表,因为链表不需要考虑存储空间大小的问题。



目录
相关文章
|
16天前
|
存储
顺序表和链表(2)
【10月更文挑战第23天】
顺序表和链表(2)
|
17天前
|
存储 算法 数据管理
顺序表和链表(1)
【10月更文挑战第22天】
|
1月前
|
存储 安全 Java
【用Java学习数据结构系列】探索顺序表和链表的无尽秘密(附带练习唔)pro
【用Java学习数据结构系列】探索顺序表和链表的无尽秘密(附带练习唔)pro
23 3
|
5月前
|
存储 缓存 算法
数据结构和算法学习记录——总结顺序表和链表(双向带头循环链表)的优缺点、CPU高速缓存命中率
数据结构和算法学习记录——总结顺序表和链表(双向带头循环链表)的优缺点、CPU高速缓存命中率
49 0
|
3月前
|
存储 算法
【初阶数据结构篇】顺序表和链表算法题
此题可以先找到中间节点,然后把后半部分逆置,最近前后两部分一一比对,如果节点的值全部相同,则即为回文。
30 0
|
3月前
|
存储 缓存
【数据结构】——顺序表与链表
【数据结构】——顺序表与链表
|
5月前
|
存储 索引
顺序表和链表
通过以上示例,我们可以看到顺序表和链表在实际应用中如何操作。顺序表适合于需要频繁读取数据的场景,而链表则更适用于频繁修改数据的情况。在选择使用哪种数据结构时,应考虑到实际应用的需求和上下文环境。
32 2
|
5月前
|
存储 SQL 算法
LeetCode力扣第114题:多种算法实现 将二叉树展开为链表
LeetCode力扣第114题:多种算法实现 将二叉树展开为链表
|
5月前
|
存储 SQL 算法
LeetCode 题目 86:分隔链表
LeetCode 题目 86:分隔链表
|
5月前
|
存储 算法 Java
【经典算法】Leetcode 141. 环形链表(Java/C/Python3实现含注释说明,Easy)
【经典算法】Leetcode 141. 环形链表(Java/C/Python3实现含注释说明,Easy)
52 2