数组与链表区别

关于数组与链表的异同主要在两个方面:结构、内存

1.结构

从结构上来说,数组和链表都属于线性结构,何为线性结构,即每个元素串连,除头尾元素,每一个元素都有一个前趋、一个后继。

2.内存

从内存上来说,数组是有序的占用一块连续的内存区(‘天生线性’),而链表在内存中是分散的,并且链表是由指针连接(‘指针连接’),并且访问链表元素只能由头节点指针,依次查找,链表不存在下标,这也就导致两者在访问、添加、删除操作时间复杂度上的差异。

 2-1 访问

访问上来说,因为数组是有序存储,切有下标,所以在随机访问中,arr[2]和arr[1000],消耗时间也是一样得;

但是链表没有下标,在访问中只能通过头节点元素指针依次访问,所以访问list[2]需要通过头节点元素指针向下查找,list[1000]需要通过依次访问前面999个元素指针顺序访问,才能找到list[1000],所以数组和链表在时间复杂度上分别是O(1)和O(n),数组-‘随机访问’;链表-‘顺序访问’。

2-2 添加

对于添加,因为数组在内存中是连续排列,在数组添加元素,所添加元素位置之后的所有元素都要后移,下标和顺序后移一位;

链表在内存中是分散的,无序也没有下标,所以在链表中添加一个元素只是在这个节点在内存中的指针发生改变,其他元素保持不变。

2-3 删除

删除和添加同理

除以上在结构和内存上的异同,两者在操作系统的内存管理上也存在差异,在内存预读方面,内存管理会将连续的存储空间读入缓存,因为数组和链表内存上的不同,所以数组往往被读入缓存,利于提高访问效率,但是链表往往不会被读入缓存,对于原本访问效率就低的链表再读入缓存效率就更低了。在实际应用中,因为链表带来的动态扩容的便利性,在做为算法的容器方面,用的更普遍一点。

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值