顺序表和链表的区别

链表

优点:

1.在给定了节点地址的情况下,任意位置的插入删除时间复杂度为O(1)。

2.可以按需申请和释放空间,更加的节约空间。

缺点:

1.不支持下标的随机访问。

2.CPU高速缓存命中率低。

顺序表

优点:

1.尾插尾删的效率高。

2.可以实现下标的随机访问。

3.CPU的高速缓存命中率高。

缺点:

1.前面部分插入删除数据,时间复杂度是O(N),因为还需要将后面的数据往前移动。

2.空间不够的情况下需要扩容,可能会异地扩容,同时伴随着一定空间浪费。

缓存命中

对于顺序表或者链表进行增删查改时并不是直接在主存中进行,而是CPU通过寄存器去实现。但是主存的读取效率相对于寄存器来说较慢,如果需要修改或访问的数据在高速缓存中的话就称之为缓存命中,就可以直接访问或者修改,如果不在高速缓存中则未命中,需要先加载到高速缓存中才能进行访问和修改。

对于顺序表或者链表和高速缓存有什么关系?

如果访问或修改的是顺序表,由于顺序表的物理地址是连续的并且将数据加载到高速缓存中是一段一段的加载,而不只是加载一个数据元素。比如说顺序表中存在一个数组arr[4]={1, 2, 3, 4},第一次想访问的是3,不在高速缓存中,于是将1加载到高速缓存中去,但是并不只是加载1,可能是一段1,2,3,4或者是1,2,3等等可能。如果你需要访问修改的是2,那么鉴于前面已经加载了一段,进行访问修改就可以更快。

如果是访问或者修改链表,由于链表申请的节点的物理地址不一定是连续的,所以在将其加载到高速缓存时可能需要一个节点加载一次,因此链表的缓存命中较低,访问修改的速度也相对较慢。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值