顺序表和链表的区别

顺序表 链表
存储空间上 物理上一定连续 逻辑上连续,但物理上不一定连续
随机访问 支持[O(1)](适配绝大多数排序方法) 不支持[O(N)](相关排序方法不可用)
任意位置插入或者删除元素 可能需要搬移元素,效率低O(N) 只需修改指针指向
插入 动态顺序表,空间不够时需要 没有容量的概念
应用场景 元素高效存储+频繁 任意位置插入和删除频繁
缓存利用率

备注:缓存利用率参考储存体系结构 以及 局部原理性。

顺序表和链表的区别_第1张图片

注:主存(内存) 辅存(外存)        主存及以上都为带电存储        缓存分为一级、二级、三级

顺序表和链表的区别_第2张图片

关于缓存利用率的解释

顺序表和链表的区别_第3张图片

  • 顺序表可以将顺序表的一块连续的空间都加载到缓存(缓存的命中率高),因此缓存利用率高。
  • 链表每次加载对应空间,链表后面部分不一定都能加载到缓存中(缓存的命中率低),也就需要多次加载,因此缓存利用率低。

对于CPU来说,它是不会一个字节一个字节的加载的,因为这非常没有效率,一般来说都是要一块一块的加载的,对于这样的一块一块的数据单位,术语叫“Cache Line”,一般来说,一个主流的CPU的Cache Line 是 64 Bytes(也有的CPU用32Bytes和128Bytes),64Bytes也就是16个32位的整型,这就是CPU从内存中捞数据上来的最小数据单位。

比如:Cache Line是最小单位(64Bytes),所以先把Cache分布多个Cache Line,比如:L1有32KB,那么,32KB/64B = 512 个 Cache Line。

相关资料:

与程序员相关的CPU缓存知识 | 酷 壳 - CoolShell

你可能感兴趣的:(数据结构与算法,数据结构)