数组、链表

1、数组
数组在物理内存分配上是连续的,所以在初始化的时候需要指定内存的大小。
数组通过下标索引来访问,所以查找的效率为O(1),由于中间插入、删除以及头部插入和删除需要移动后续的数据保证数组是连续的,所以中间和头部的插入和删除的效率为O(N),修改的效率与查找的效率一致为O(1)
2、链表
链表在物理内存分配上不需要联系,所以能够更好的利用碎片内存,在初始化的时候只需要分配头节点的内存大小。
链表分为单链表和双链表,单链表节点中保存自己的数据域和后置节点的索引,双链表中保存自己的数据域和后置节点的索引以及前置节点的索引。
双链表提高了查找和删除的效率,但是多保存了前置节点的索引,是典型的空间换时间的设计
链表的查找需要遍历查找,单链表的查找效率为O(N),双链表可以同时从头节点向后查找和从尾节点像前进行查找,双链表的查找效率可以提高一倍。
链表插入和删除都很方便,在知道节点索引的情况下,时间复杂度只要O(1),但在不知道节点索引的情况下,如果进行插入和删除,先需要找到对应的节点再进行插入或删除,此时的时间复杂度是O(N)

猜你喜欢

转载自www.cnblogs.com/youmingDDD/p/11574113.html