1.插入对比
数据无序
链表
插入只需要在表头或者表位插入即可,时间复杂度O(1)。
数组
插入也只需要在数组的头部或者尾部插入即可,时间复杂度也是O(1)。但是数组可能无空间存入新数据的情况。
数据有序
链表
需要进行数据的对比,时间复杂度是O(n),然后对比到可插入位置,才能插入。可以通过跳表等数据结构进行优化。
数组
需要进行数据的对比,时间复杂度是O(n+m),n代表查找的时间,m代表数组移位的时间。查找可以利用二分等进行优化。移位必须老老实实的进行一步步的操作了。
2.删除对比
数据无序
链表
删除需要进行数据的查找,所以时间复杂度O(n)。因为是无序的,不能优化,但是删除动作时间复杂度是O(1)。
数组
删除同样需要数据查找,时间复杂度O(n)。同样无序,不能优化。但是呢数组对于cpu缓存比较友好,所以查询时间会更短一些。但是相比于链表,删除动作需要移位数组的数据。但是这里可以进行优化,直接将末尾的数据移位到这里即可。所以时间复杂度同样是O(1)。
数据有序
链表
查找数据,时间复杂度O(n),可使用跳表优化。删除动作时间复杂度O(1)。
数组
查找数据,时间复杂度O(n),数组对cpu缓存友好。可优化查询。删除动作需要将后面的所有数据按次移位,所以时间复杂度O(n)。
3.查找对比
数据无序
链表
时间复杂度O(n),不能优化。
数组
时间复杂度O(n),不能优化。但是cpu缓存对数组友好。相对来说速度会快一点
数据有序
链表
时间复杂度O(n),使用跳表等优化。
数组
时间复杂度O(n),使用二分等优化。
4.遍历对比
数组可以按照下标进行遍历。数组可以使用下标获取某位数据,获取复杂度O(1)。
链表需要通过指针进行遍历。链表要获取第几位数据,只能通过指针循环,复杂度O(n)。
网友评论