顺序表和链表的优缺点对比

目录

1 顺序表和链表的优缺点对比

1.1 顺序表

1.1.1 优点

1.1.2 缺点

1.2 链表

1.2.1 优点

1.2.2 缺点

1.3 存储器层次结构

1.4 分别遍历顺序表和链表


1 顺序表和链表的优缺点对比

1.1 顺序表

1.1.1 优点

  • 最大优点:支持随机访问(用下标访问),对需要随机访问结构的算法很是适用

  • CPU高速缓存命中率更高

1.1.2 缺点

  • 头部、中间插入删除效率低O(N)

  • 物理空间是连续的,空间不够则需要扩容

而扩容存在2大问题

  1. 扩容有一定程序消耗

  2. 为避免频繁扩容,我们按照2倍扩容,如果用不完会有空间浪费

1.2 链表

1.2.1 优点

  • 任意位置插入删除效率高O(1)

  • 按需申请释放空间,基本没有任何空间的浪费

1.2.2 缺点

  • 不支持随机访问。意味着不适用一些排序和二分查找等

  • 链表存储一个值,同时也要存储一个指针,有一定消耗(影响不大)

  • CPU高速缓存命中率更低

1.3 存储器层次结构

1.4 分别遍历顺序表和链表

顺序表和链表的优缺点对比_第1张图片

顺序表和链表的优缺点对比_第2张图片

  • 数据小的先放入寄存器,放不下的放在缓存里

  • 要访问数据1的地址,先查看其是否在缓存cache里,第一次肯定不在,就将其加载到缓存中(不在 == 未命中)

而对于这两个结构

顺序表和链表的优缺点对比_第3张图片A的命中率更高,B低

CPU理论的基本原则 就近原则:你访问的数据,一般情况下马上就会访问到近处的数据

  • A访问了数据1,则2345都会一起加载(存储)以便后面可能的直接使用

  • B访问了数据1,2345再次malloc数据之间可能隔得很远,所以不容易命中

你可能感兴趣的:(数据结构,链表,数据结构,c语言)