在实现堆栈和队列时,数组相对于链表有什么优势

问题描述 投票:0回答:4

既然可以用链表来实现,为什么我们要用数组来实现堆栈和队列呢? 我刚刚学会了使用链表实现堆栈和队列,所以自然地使用数组现在对我来说没有意义,更具体地说,我们可以受益于

O(1)
pushpop 只需操作 head 指针,并且不必担心数组的大小,除非它太大。

arrays algorithm data-structures stack queue
4个回答
2
投票

如果您正在实现纯堆栈(您仅访问第一个项目)或纯队列(您仅访问第一个或最后一个项目),那么无论您是否实现了,您都具有 O(1) 访问权限它作为数组或链表

正如您所提到的,使用数组的缺点是当数据结构增长超出您已经分配的范围时必须调整大小。但是,您可以通过始终将大小加倍来减少调整大小的频率。如果您最初分配了足够的空间来处理典型的堆栈大小,则调整大小的情况很少见,并且在大多数情况下,一次调整大小操作就足够了。如果您担心分配了太多内存,则可以随时添加一些逻辑,如果分配的内存量远远超过数据结构中的项目数,则可以减少大小。

链表有一定的好处,但是链表的每次添加都需要一次分配(以及删除、释放),这需要一些时间,并且还可能导致堆碎片。此外,每个链表节点都有一个

next
指针,使得每个项目所需的内存量比数组所需的内存量更多。最后,每个单独的分配都有一些内存开销。总而言之,由
n
项目组成的链表将比由
n
项目组成的数组占用更多内存。

因此每种方法都有优点和缺点。我不会说这两者都可以被认为是“最好的”,但是有充分的理由使用数组而不是链表来实现这些数据结构。如果正确实现,基于数组的堆栈或队列可以比链表实现更快、内存效率更高。


1
投票

在数组中,如果你想进入某个元素(比如 10),你必须在括号内写出数组的名称及其索引。但在链表中,你必须从头开始并工作因此,访问数组中的元素比链表更快,因为链表需要线性时间来进行搜索。


1
投票

数组和列表都有各自的优点/缺点;当你需要什么时,由你决定!例如,

在数组中,我们可以在 O(1) 复杂度中获取元素当你需要时 如果您认为这是一个优点,则在链表的情况下最小O(n) 相比链表,缺点是数组的大小需要 预先确定这在实现现实世界时可能会出现问题 问题,因为在实现问题之前很难知道输入/输入列表的大小,有时需要在运行时增长/放大列表

因此可以看出,您需要根据您正在处理的情况考虑这些优点/缺点,并需要慷慨地使用这些数据结构! :D


0
投票

虽然链表为动态调整大小和高效插入和删除提供了更大的灵活性,但基于数组的实现通常因其简单性和易于编码而受到青睐。管理链表中的内存和指针可能更加复杂并且容易出错,特别是对于初学者而言。相比之下,数组通常拥有较少的内存开销,并且不涉及额外的指针,这提高了它们的内存效率。链表需要额外的内存来存储指向下一个节点的指针或引用,而数组只需要存储数据元素的空间。链表的另一个缺点是它们的节点内存位置分散,导致更多的缓存未命中。另一方面,数组根据其索引提供对任何元素的恒定时间访问,这使得它们对于访问或修改元素特别有效。 我们应该记住,必须认识到数组和链表都有各自的优点和缺点。与链表相比,数组在动态调整大小和灵活性方面有更多限制。

© www.soinside.com 2019 - 2024. All rights reserved.