对于顺序表和链表的区别

简介: 对于顺序表和链表的区别

前言


顺序表是用一段物理地址连续的存储单元依次存储数据元素的线性结构,一般情况下采用数组存储。在数组上完成数据的增删查改。

链表是一种物理存储结构上非连续、非顺序的存储结构,数据元素的逻辑顺序是通过链表中的指针链接次序实现的 。

不同点 顺序表 链表
存储空间 物理空间一定连续 逻辑上是连续的,物理上不一定连续
对于随机访问 可以随机访问,O(1) 不支持随机访问,O(N)
对任意位置插入或删除元素 可能需要搬移元素,效率低,复杂度O(N) 实现只需修改指针指向
插入元素 对于动态顺序表,空间不够是需要扩容 不需要扩容,没有容量的概念
适用场景 元素高效存储和频繁访问(下标随机访问) 对任意位置插入和删除频繁 O(1)
缓存利用率


对于缓存命中率高低理解:

数据存储在内存中,cpu和内存交换数据时,会有一个高速缓存区(SRAM),缓存区一次性读取一定字节的数据,顺序表由于物理空间是连续的,读取开头的地址时会把后面的数据一起带进去,这样就会减少遍历的时间。而链表物理空间不一定连续,就会需要更长的遍历时间,因此缓存利用率更低。


图示:存储器层次结构


4bb9679b89594f058b1cd13dfce91985.png


更加深入了解请参考耗子叔的一篇博客:CPU缓存知识


相关文章
|
1月前
|
存储
顺序表和链表(2)
【10月更文挑战第23天】
顺序表和链表(2)
|
1月前
|
存储 算法 数据管理
顺序表和链表(1)
【10月更文挑战第22天】
|
2月前
|
存储 缓存 C语言
C语言:链表和数组有什么区别
C语言中,链表和数组是两种常用的数据结构。数组是一种线性结构,元素在内存中连续存储,通过下标访问,适合随机访问且大小固定的情况。链表由一系列不连续的节点组成,每个节点存储数据和指向下一个节点的指针,适用于频繁插入和删除操作的场景,链表的大小可以动态变化。
|
2月前
|
存储 安全 Java
【用Java学习数据结构系列】探索顺序表和链表的无尽秘密(附带练习唔)pro
【用Java学习数据结构系列】探索顺序表和链表的无尽秘密(附带练习唔)pro
26 3
|
6月前
|
存储 缓存 算法
数据结构和算法学习记录——总结顺序表和链表(双向带头循环链表)的优缺点、CPU高速缓存命中率
数据结构和算法学习记录——总结顺序表和链表(双向带头循环链表)的优缺点、CPU高速缓存命中率
54 0
|
4月前
|
存储 算法
【初阶数据结构篇】顺序表和链表算法题
此题可以先找到中间节点,然后把后半部分逆置,最近前后两部分一一比对,如果节点的值全部相同,则即为回文。
32 0
|
4月前
|
存储 缓存
【数据结构】——顺序表与链表
【数据结构】——顺序表与链表
|
5月前
|
存储
数组与链表有什么区别
数组与链表有什么区别
|
6月前
|
存储 索引
顺序表和链表
通过以上示例,我们可以看到顺序表和链表在实际应用中如何操作。顺序表适合于需要频繁读取数据的场景,而链表则更适用于频繁修改数据的情况。在选择使用哪种数据结构时,应考虑到实际应用的需求和上下文环境。
41 2
|
6月前
|
存储
2.顺序表_链表(附练习)
2.顺序表_链表(附练习)