1.顺序表
优点:
1、物理空间是连续的,方便使用下标随机访问。
缺点:
1、由于需要物理空间连续,空间不够需要扩容。扩容本身有一定消耗,其次扩容机制还存在一定的空间浪费。
2、头部或者中部的插入、删除需要挪动数据,效率低 O(n).
2.链表
优点:
1、任意位置的插入删除数据的效率高O(1).
2、按需申请和释放空间。
缺点:
1、不支持下标的随机访问。有些算法不适合在链表上进行,比如二分查找、排序等
2、空间利用率不如链表,需要一个结点中除了有数据,还有指向其他结点的指针
3、顺序表其他优点
顺序表还有一个优点:CPU高速缓存命中率高
由于内存的速度太慢,CPU不会直接访问内存,数据会先加载到三级缓存或寄存器(4/8byte的小数据会放到寄存器,大数据加载到缓存)
CPU会看数据是否在缓存,在就叫命中,直接访问
不在就叫不命中,先把数据从内存加载到缓存,再访问
而每次加载基于局部性原理,会把数据连续一段空间都加载到缓存