当前位置: 首页 > 知识库问答 >
问题:

实现更有效的队列

盛建德
2023-03-14
type Queue[A] = List[A]

    def enqueue[A](e: A, queue: Queue[A]): Queue[A] = queue match {
    case Nil => List(e)
    case head :: tail => head :: enqueue(e, tail)
    } 

    def dequeue[A](queue: Queue[A]): Option[(A, Queue[A])] = queue match {
    case Nil => None()
    case head :: tail => Some((head, tail))
    }

我想看看我是否在正确的轨道上,或者有没有更有效的方法来实现这一点?

共有1个答案

曹乐意
2023-03-14

从标准库队列的源:

队列对象实现的数据结构允许:

  • 以先进先出(FIFO)的方式插入和检索元素。
  • 队列实现为一对列表,其中一个包含“in”元素,另一个包含“out”元素。
  • 元素被添加到“in”列表中,并从“out”列表中删除。当“out”列表枯竭时,队列将通过将“out”列表替换为“in.reverse”,将“in”替换为“nil”来旋转。
  • 向队列中添加项总是具有成本O(1)。移除项的成本O(1),但在需要透视的情况下除外,在这种情况下,成本为O(n),其中n是队列中的元素数。
  • 发生这种情况时,保证n具有O(1)开销的删除操作。删除一项平均O(1).
 类似资料:
  • 问题内容: 任何人都可以提出转到容器,简单快速的FIF /队列,Go有3个不同的容器:,和。哪一个更适合实现队列? 问题答案: 向量或列表都应该起作用,但是向量可能是可行的方法。我之所以这样说是因为,向量分配的频率可能会比列表和垃圾回收(在当前的Go实现中)少得多,这是相当昂贵的。不过,在一个小程序中,这可能并不重要。

  • 优先级队列对每个条目都有一个优先级值和数据。 因此,当向队列中添加新元素时,如果该元素的优先级值高于集合中已有的元素,则该元素会浮上表面。 当调用pop时,我们将获得具有最高优先级的元素的数据。 这种优先级队列在JavaScript中的高效实现是什么? 有一个名为PriorityQueue的新对象,创建两个方法(push和pop)来获取两个参数(数据、优先级),这有意义吗?作为一个编码器,这对我来

  • 我目前正在读一本关于数据结构/算法的教科书。其中一个练习是使用python列表结构实现一个高效的队列:入队和出队的时间复杂度平均需要为O(1)。书上说时间复杂度应该只有出队的一个具体情况是O(n),其余时间应该是O(1)。我实现了它,使得队列的后面是列表的末尾,而队列的前面是列表的开头;当我让一个元素出队时,我并没有从列表中删除它,而是简单地增加一个计数器,这样方法就知道列表中的哪个元素代表队列的

  • 我正在使用NET Core 5.0.0开发一个API Web ASP.NET Core项目,并使用Azure.Storage.Queues12.6.0来写入和读取队列消息。 一切正常,但我想知道我阅读消息的方式是否可以,或者在速度和效率方面有更好的方法。 这是我用的密码。它只是Microsoft教程中的一段代码,放在a while()循环中。AzureQueue只是QueueClient类的一个实

  • 我想这可能是一个新手问题,但我仍然想知道一些答案。 假设存在实体:医院和医生(多对多)。假设在我的controller类中,我必须获取所有现有的医生和医院,然后在特定的医院雇佣一名医生 它当然不起作用,因为--据我所知--我已经在控制器中获取了所有的医生和医院,然后在hireDoctor方法中,我们打开了传递常规Java对象的trasaction,这些对象不在会话中。 我知道,我可以用一个特殊的身

  • 本文向大家介绍Python实现队列的方法,包括了Python实现队列的方法的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了Python实现队列的方法。分享给大家供大家参考。具体实现方法如下: 希望本文所述对大家的Python程序设计有所帮助。