数组与链表增删改查效率比较
转自:https://blog.csdn.net/qq_25186987/article/details/53886809
1.只比较操作
因为数组可以随机访问,所以它的查询和修改效率更高,但在增加删除元素时需要移动元素,所以效率低;
链表只能顺序访问,所以它查询修改效率低,但是增加删除时只需修改指针指向就可以了,所以效率高。
但是在增加和删除时,也包括查询的操作,上面并没有提到,所以到底是哪个数据结构更快呢?
2.实验
转自:https://blog.csdn.net/qq_25186987/article/details/53886809
这个链接进行了实验,发现在总的长度增加时,还是数组的效率更高。
得出结论:在靠前的位置插入数据,链表效率较高,在靠后位置插入数据,数组效率较高。
另外评论区中提到,数组可能会存在容量不足重新申请空间+移动的问题,这个我也想到了,回复说,这个产生的机会是比较少的,扩容不是每次都触发,而且每次都会2倍扩容,和链表操作相比,并不特别影响效率。
3. 理论分析
转自:https://cloud.tencent.com/developer/article/1415172
从内存管理角度:
在OS中有不同的寄存器级别,速度越来越慢,针对数据来说,它是连续的一块空间,所以由于局部性原理,读取时会将它部分或者全部元素放入缓存中,而链表是分散在堆中间中的,不能方便地读取到缓存中,所以速度慢。
所以总的来说,在CRAD方面,其实数组效率整体都高于链表的。