gpt4 book ai didi

clojure - Clojure 中的固定长度堆栈结构

转载 作者:行者123 更新时间:2023-12-02 23:49:09 24 4
gpt4 key购买 nike

对于固定长度的堆栈(我最初称之为队列,但我想要的是堆栈)来说,最好的数据结构是什么,其中项目添加到前面,并且每次将项目添加到前面时,从最后删除?也将从前面访问不同长度的子向量。我之前使用的是向量,现在正在考虑 clojure.lang.PersistentQueue 和手指树。

编辑,澄清,类似:

> (def q (queue [1 2 3 4]))
[1 2 3 4]
> (push q 9 8 7)
[7 8 9 1]
> (peek (push q 9 8 7))
7

edit2:感谢您到目前为止的所有回答,这已经变成了一个回到基础知识和阅读《Clojure 的乐趣》的练习,例如学习 subvec 的 subvec 保留对第一个 subvec 向量的引用,而类似 ( vec (cons x (subvec... 如果重复使用,将会累积对所有中间 subvec 的引用。鉴于此,基于向量的队列的推送实现怎么样?:

(defn push [v i n] (if (>= (count v) n) (conj (subvec v 1 n) i) (conj v i) ) )

然后可以通过 rseq 访问结果向量,我相信这对于向量来说速度很快(因为它使用了索引偏移?)

最佳答案

查看 Amalloy 的环形缓冲区 https://github.com/amalloy/ring-buffer

关于clojure - Clojure 中的固定长度堆栈结构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13353463/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com