什么是数组和列表的区别?
list
不是一个链表。Python list
和array
之间的区别在于,list
可以存储任何东西,而数组只能存储原始类型(int
、float
等)。- KennyTM
list
不是链表。Python中list
和array
的区别在于list
可以存储任何类型的数据,而array
只能存储基本类型(int,float等)。 - kennytmO(1)
时间内访问数组的任何成员(即如果a
是一个数组,a[4]
),并且在编译时具有预设大小。链表具有顺序访问——要访问一个元素,必须遍历链表直到找到所需元素(即如果b
是一个链表,则要访问b
的第5个元素,必须遍历元素0、1、2、3和4),而且大小可以动态增长和缩小。malloc
和类型指针进行动态内存分配这样的操作吗?@bguiz - Stephenmalloc
。 - Steve Jessopnew
运算符,它将在堆上创建,而不是栈上,并且其大小在运行时确定。 - bguiz对于数组,它有一个固定的大小,就像我们写的new int [100],但列表没有固定的大小...它可以不断增长。
在列表中插入和删除比在数组中更容易。原因是我们可以简单地使用链接列表来更改指针以进行插入和删除,但对于数组,插入和删除需要向右或向左移动。
链接列表使用虚拟头节点来避免将元素插入空列表或从仅包含一个节点的列表中删除最后一个节点时出现特殊情况;并且,它使用双重链接允许双向迭代。当然,其成本是需要额外的空间来保存虚拟节点(最小成本),以及每个节点除了通常的下一个链接之外还需要额外的前一个链接(更显著的成本)。
在链接列表中,对尾节点的引用只需使用header.prev即可,这使我们能够在常数时间内附加到列表(无需迭代查找尾引用,也无需维护单独的尾引用)。但是,在数组中,我们需要在插入之前重新调整数组大小。
数组具有灵活性,可以实现随机访问,而链接列表则不能。
链表存在以下问题:
我们使用的指针会消耗额外的内存存储!
时间复杂度为O(n),而不是像数组一样的O(1)
单向链表难以进行反向遍历,如果使用双向链表,则需要更多的指针来消耗额外的内存存储
还有堆限制!只有在堆中有足够的空间时才分配内存。如果内存不足,则不会创建内存。
数组存在以下问题:
可能会浪费或短缺内存。
希望这可以帮助! :)
数组只包含相似的数据类型,即它们是同质的。我们只能有一个字符串、整数等类型的数组,而且数组的大小是预定义的。 但在列表的情况下,我们可以拥有任何类型的元素。无论是字符串、整数还是两者的组合都可以。列表中允许空值或重复元素。列表的示例包括ArrayList、LinkedList。在列表中,大小可以随时增加或缩小。