algorithm - Clojure 中的不可变队列

标签 algorithm data-structures clojure queue immutability

在 Clojure 中获得简单、高效的不可变队列数据类型的最佳方法是什么?

它只需要两个操作,具有通常语义的入队和出队。

我当然考虑过列表和向量,但我知道它们分别在末尾和开头的修改性能相对较差(即 O(n) 或更差)——因此不适合队列!

理想情况下,我想要一个适合入队和出队操作的 O(log n) 的持久数据结构。

最佳答案

问题已解决 - 对可能会觉得有帮助的其他人的解决方案。

我发现 Clojure 具有 clojure.lang.PersistentQueue 类,可以执行所需的操作。

你可以像这样创建一个实例:

(def x (atom clojure.lang.PersistentQueue/EMPTY))

据我所知,您目前需要使用 Java 互操作来创建实例,但正如 Michal 所指出的那样,您随后可以使用 peek、pop 和 conj。

关于algorithm - Clojure 中的不可变队列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3136453/

相关文章:

algorithm - 斐波那契 : non-recursive vs memoized recursive puzzling timing results

java - 如何将白色背景更改为黑色

algorithm - "Flip"仅使用 +1/-1 而不使用 if/else 的简单循环的输出

python - 有效地在列表(或其他数据结构)中插入多个元素并保持它们的顺序

Clojure reducer - 有效地将函数应用于并行的两个向量

emacs - clojurescript中浏览器Repl、浏览器、http服务器之间的交互

数组元素的PHP组合

data-structures - 链表相对于数组的优势是什么,反之亦然?

java - 对象的 ArrayList 与 HashMap 的 Arraylist

vector - 获取映射向量中最大键的向量