链表能做的事,顺序表都可以完成,只是操作方法不同,效率不同
不同点 | 顺序表 | 链表 |
---|---|---|
存储空间上 | 物理上一定连续 | 逻辑上连续,但物理上不一定连续 |
随机访问 | 支持O(1) | 不支持:O(N) |
任意位置插入或者删除元素 | 可能需要搬移元素,效率低O(N) | 只需修改指针指向 |
插入 | 动态顺序表,空间不够时需要扩容 | 没有容量的概念 |
应用场景 | 元素高效存储+频繁访问 | 任意位置插入和删除频繁 |
缓存利用率 | 高 | 低 |
1、先查数据是否在高速缓存,在就直接访问
2、不在高速缓存从内存加载数据到缓存,再访问
从内存加载时访问内存的地址及其后面的一段,与硬件相关,因为它加载当前位置和该位置后面一段的成本差不多,并且也可以认为是当你访问这个数据时,你即将访问附近的数据,当你访问顺序表时缓存能快速命中,这就是顺序表的优势,链表就不一定能访问。
所以如果不是要大量头插头删,用顺序表会更快。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。