一、顺序表的优缺点
一、顺序表的优点
1. 支持随机访问。 有些算法是需要结构支持随机访问的,比如二分查找法、优化的快排 等等。
2. CPU高速缓存命中率更高。
二、顺序表的缺点
1. 空间不够时,需要扩容,而扩容又有消耗。
2. 头部或者中间位置的插入删除,需要挪动,挪动数据也是有消耗的。
3. 避免频繁扩容,一次一般都是按倍数去扩(2倍),可能存在一定空间浪费 。
二、链表的优缺点
一、链表的优点
1. 按需申请空间,不用了就释放空间,更合理的使用空间。
2. 头部中间插入删除数据,不需要挪动数据。
3. 不存在空间浪费。
二、链表的缺点
1. 每存一个数据,都需要存一个指针去链接后面数据节点。
2.不支持随机访问(用小标直接访问第i个) 。
3.cpu高速缓存命中率更低。
三、CPU高速缓存命中率
前面这两个都提到了CPU高速缓存命中率,这里简单的说一下,若还是不理解可以去看 具体的解释。举个例子:顺序表 :[1, 2, 3, 4, 5, 6] 链表:1->2->3->4->5->6 访问存储1的数 据的内存位置0x00123440,先看这个地址在不在缓存中,在就直接访问,不在就先加载到缓 存,再访问,不在缓存说明没有命中 ,假设不命中,一次加载20字节到缓存(具体加载多大 取决硬件体系) 内存访问会一次加载这个地址附近成片的一块。顺序表之间地址是连续的, 而表之间的地址相差挺大 所以顺序表的缓存次数会比链表的少很多,也就是CPU高速缓存命 中率高很多,这就是为啥链表的CPU高速缓存命中率更低,而顺序表的更高的原因。