赞
踩
这也算面试中的经典问题了,当然,面试官可能不会直接问我们链表顺序表,更大可能性是问arrayList和linkedList有什么区别,这时候我们回答的重点可以放在动态数组上的动态上。
顺序表的物理结构就是数组。数组的底层是一段物理地址连续的内存空间。通过数组下标能对数组中的元素进行随机访问,时间复杂度是O(1)。
集合类ArrayList中扩容机制的底层实现源码:
分析上述源码发现:
顺序表的插入和删除操作,都是
从整个插入算法或删除算法来说,插入和删除操作的时间复杂度都是O(n)。
链表的物理结构不一定连续。所以没办法做到随机访问链表中的元素。如果想要访问链表中的元素,只能通过遍历链表,时间复杂度是O(n)。
用链表存数据时,是随用随分配。
链表的插入和删除操作,都是
从整个插入算法或删除算法来说,链表插入和删除操作的时间复杂度都是O(n)。
对比链表和顺序表,可以发现:
虽然顺序表和链表,他们的插入和删除元素的时间复杂度都是O(n),但是链表的插入和删除元素不需要挪动元素。
回顾上文中总结的顺序表和链表的插入和删除操作,其实就可以发现,顺序表的插入或删除操作的时间复杂度O(n)是从2n+C
渐进过来的,而链表的插入或删除操作的时间复杂度O(n)是从n+C
渐进过来的。
假设在列表中,需要频繁的插入和删除元素,每次向顺序表中插入和删除元素,都要进行挪动数据,但是向链表中插入和删除元素,却不需要。此时,链表的效率自然高于顺序表。
所以比较顺序表和链表,
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。