【问题标题】:What is the difference between Array Stack , Linked Stack , and StackArray Stack 、 Linked Stack 和 Stack 有什么区别
【发布时间】:2014-05-24 14:45:48
【问题描述】:

最近在学习Stack, Bag, and Queue。 我在阅读课堂笔记时突然冒出一个问题。

ArrayLinked 有什么区别? 为什么我们不能只使用Stack

Stack<String> stack = new Stack<String>()
Stack<String> stack = new ArrayStack<String>()

这两个我认为他们做同样的事情,他们可以偷看、弹出和删除

我不明白为什么我们需要实现数组或链接

【问题讨论】:

    标签: java arrays linked-list stack


    【解决方案1】:

    基本上,它与性能有关。 “堆栈”只是一个接口——它是一种获取数据以通过某些命令集查看和修改的方式。然而,这并不能说明 如何 将数据存储在结构中 - 这就是像 ArrayStackLinkedStack 这样的东西变得重要的地方。

    基本上,这些堆栈中的每一个都由一些更原始的结构“支持” - 这是实际存储我们放入其中的数据的幕后位。对于ArrayStack,这是一个数组 - 对于LinkedStack,这是一个链表。

    那么有什么区别呢?好吧,考虑一下数组。数组必须使用连续的内存——也就是说,整个数组必须在内存中分配一个块,这是一个长的不间断的块。另一方面,链表由通过指针链接的各个节点组成——根本不需要它是连续的。这使得调整数组大小成为问题——本质上,我们必须创建一个新数组,并将所有内容复制到其中以调整它的大小。这可能是堆栈的问题,因为我们通常不知道堆栈将变得多大。链表没有这个问题——我们只需创建一个新节点并将其链接到之前的链表即可。

    因此,总体而言,差异在于内存使用和性能 - 尝试实现两者并计时它们如何处理 big 数据以查看差异。

    【讨论】:

    • 那么,栈中的数据是随机存储的吗?并且链接栈或数组栈中的数据存储在我们可以到达的分配地址中?
    • Vanishadow:你误会了。将“堆栈”视为描述我们希望数据结构执行的什么的一种方式,而不是如何执行它。 ArrayStackLinkedStack 将提供如何我们做我们想做的“堆栈”事情。
    【解决方案2】:

    任何数据结构的使用取决于您想要做什么。每种不同的数据结构对于不同的场景都有不同的性能。有关更多信息,请在 Wikipedia 上阅读有关它们的更多信息

    【讨论】:

      【解决方案3】:

      无论实现如何,操作和功能都是相同的。您选择使用数组或链接类型来提高性能。

      性能细节在这里得到更详细的回答:Array-Based vs List-Based Stacks and Queues

      【讨论】:

        【解决方案4】:

        LinkedStack 存储在链接节点中。它代表后进先出 (LIFO)。它支持通常的 pushpop 操作,以及具有用于查看顶部项目、测试堆栈是否为空以及以 LIFO 顺序迭代项目的方法。

        ArrayStack代表栈的数组实现,是iStack的数组实现基础。其生长因子为 2,起始大小为 150。

        Stack它扩展了Vector类,增加了5个操作,可以将一个vector当作一个栈。测试堆栈是否为空,以及一种在堆栈中搜索项目并发现它离顶部多远的方法。

        更多详情请访问Array-Based vs List-Based Stacks and Queues

        【讨论】:

        • linkedStack中有存储数据的地址吗?
        • @Vanishadow 不明白。
        • 可以通过数组获取索引。 LinkedStack 做同样的事情吗?另外,能不能写个方法来替换栈底
        • @Vanishadow 这是一个简单的堆栈。您不能像数组一样通过索引访问数据。
        • 我们可以替换 arrayStack 中的项目吗? ex 0 1 2 4 ,改为 0 3 2 4
        【解决方案5】:

        Stack 是 Java JDK 的一部分(请参阅JavaDoc)。 ArrayStackLinkedStack 不是标准 JDK 的一部分。仅依靠名称,它们将由数组或链表支持,而不是基于Vector

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2021-11-02
          • 1970-01-01
          • 2015-07-16
          • 2017-04-05
          • 2016-06-10
          • 1970-01-01
          相关资源
          最近更新 更多