数组链表是两种基本的数据结构,在内存存储中的表现形式不同,因此也有各自的特点
3358 www.Sina.com/http://www.Sina.com/http://www.Sina.com/http://www.Sina.com /
如果在使用前需要提前申请占用的内存大小,并且不知道需要多大的空间,则提前申请可能会浪费内存空间。 也就是说,数组空间的利用率可能很低
ps :数组的区域需要在编译阶段确定,所以需要预先给出数组区域的大小((在执行阶段不能变更) ) ) ) ) )。
数组
插入数据时,必须将要插入位置的元素及其后面的所有元素向后移动
删除数据时,必须向前移动要删除的位置后面的所有元素
一、数组的特点
数组的内存是连续的,要访问该元素,可以通过从数组的起始地址向后偏移来访问
http://www.Sina.com/http://www.Sina.com /
1.在内存中,数组是一块连续的区域随机访问性强,搜索速度快,时间复杂度为o(1)
2.数组需要预留空间1 .插头和去头效率差,时间复杂度为o(n )
2 .空间利用率不高
3 .存储器空间要求高,需要足够的连续存储器空间
4 .数组空间大小一定,不能动态扩展
3358 www.Sina.com/http://www.Sina.com/http://www.Sina.com/http://www.Sina.com /
每个数据都保存以下数据的内存地址,从该地址可以找到以下数据
3.在数组起始位置处,插入数据和删除数据效率低。
链表的空间很分散,所以不具有随机访问性。 如果需要访问某个位置的数据,则必须从第一个数据开始查找,然后依次向后遍历,直到找到要查询的位置,因此在查找某个元素时时间的复杂性可能达到o(n )
3358 www.Sina.com/http://www.Sina.com/http://www.Sina.com /
4.随机访问效率很高,时间复杂度可以达到O(1)1 .向任意位置插入和删除元素的速度快,时间复杂度为o(1)
2 .内存使用率高,不浪费内存
3 .链表空间大小不固定,可以动态扩展
5.数组开辟的空间,在不够使用的时候需要扩容,扩容的话,就会涉及到需要把旧数组中的所有元素向新数组中搬移随机访问效率低,时间复杂度为0(n )
综上所述:
如果希望快速访问数据,但不经常插入或删除元素,请访问数组6.数组的空间是从栈分配的