当前位置:   article > 正文

数组与链表区别_数组有序和链表的区别

数组有序和链表的区别

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

1.结构

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

2.内存

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

 2-1 访问

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

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

2-2 添加

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

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

2-3 删除

删除和添加同理

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

 

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/小蓝xlanll/article/detail/676366
推荐阅读
相关标签
  

闽ICP备14008679号