【问题标题】:Array list or linked list which one to select数组列表或链表选择哪一个
【发布时间】:2017-10-29 13:54:17
【问题描述】:

我收到了一份问题说明,问题说明是假设您正在为餐馆构建一个应用程序来接受客户订单。

您的应用需要存储订单列表。服务器不断增加 订单到此列表,厨师从列表中取出订单并制作它们。 这是一个订单队列:服务器将订单添加到队列的后面, 厨师从队列中取出第一个订单并烹饪。 你会使用数组还是链表来实现这个队列。

我还清了链表。许多插入正在发生(服务器 添加订单),其中链表擅长。你不需要搜索 或随机访问(数组擅长什么),因为厨师总是 将第一个订单从队列中移除。

现在请告知我的回答是正确的,我还认为服务器同时将十个项目放入队列但在另一端厨师决定它将首先选择项目,这将花费更少的时间来准备所以在那种情况下哪种数据结构最好

【问题讨论】:

    标签: arraylist data-structures linked-list


    【解决方案1】:

    基于链表的队列将是上述问题的最佳选择。在链表队列中,您具有插入(由服务器放置订单)和删除(由厨师接受订单)的 O(1) 操作的优势。此外,您还有动态内存分配(内存仅在需要时才用完)。

    我曾参与过一个类似的项目,我们过去常常将类似的订单组合在一起,这是厨师在现实世界中通常会做的事情。例如:服务器 1 的 2 个薯条和服务器 2 的 3 个薯条将变成总共 5 个薯条订单。

    当你想实现一个考虑基于准备item的时间随机访问的场景时,我仍然认为链表队列会更有用。

    【讨论】:

      【解决方案2】:

      是的,链表应该是要走的路。

      这通常是因为您不仅试图从一端插入,还试图从另一端移除元素。

      现在在这个链表中,您将有一个头和一个尾,您将保持它们的指针始终可用(因为您需要从尾中删除元素并在头顶添加元素)。

      随着订单向头部添加,头部不断更新:这里没问题。

      对于厨师删除一个订单的部分:您必须从列表中删除项目,并保持尾指针指向倒数第二个对象,该对象现在是列表中的最后一个对象。

      我能想到的唯一方法是使用双向链表,每次从队列中删除(或弹出)一个元素时尾部都会更新(抱歉,链表)。

      我想这就是我被教导如何使用双向链表实现队列的方式。

      可以参考实现here

      编辑:

      您也可以使用单链表来做到这一点。步骤是:

      1. 每当添加新元素时,将其添加到列表的末尾并更新尾指针。
      2. 每当厨师需要链表中的元素时,访问头部,取出一个元素并从头到头更新->下一步。

      【讨论】:

        猜你喜欢
        • 2010-09-29
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多