【发布时间】:2020-05-20 00:21:00
【问题描述】:
我正在用 javascript 学习数据结构
我现在的重点是如何实现双端队列?
Edite:从下面的 cmets 中,我获得了有关如何实现
deque based array的有用指导。有没有方向如何使用类实现deque based object?
我明白了一些我需要的点:
- addFront()
- removeFront()
- peekFront()
- addBack()
- removeBack()
- peekBack()
但我对某些观点感到困惑:
我需要多少个指针? 至少我从 queue 知道我需要两个(头尾)指针,但不确定在 deque
中是否需要更多
在这种情况下,javascript 中哪种数据类型方便作为基础?我在 youtube 上看到一些导师在谈论循环数组,例如在 JS 中对我来说是未知的。
edit2:
我正在关注一本书,名为:学习 javascript 数据结构和算法第三版
在本书的第 5 章中,作者开始实现仅基于对象和一些变量的 Deque
但我不明白他是怎么做到的,因为代码已加密,但我仍然可以从 github repository 访问他的文件并测试他的方法
我可以说@trincot 非常接近图书作者的方法
但是当我比较结果时,我得到了这个 [1 = author - 2 = @trincot] :
根据关于链表的书籍索引出现在第6章,所以我没想到他的解决方案会基于他之前没有提到的东西
如果我错过任何一点,我会很感激告诉我......谢谢
【问题讨论】:
-
默认的 JS 数组已经是这样的结构:
push(),pop(),shift(),unshift()以及标准索引访问应该为您提供所需的所有工具。跨度> -
@Sirko 你的意思是我不需要
deque而只需要default JS array来完成这项工作吗? -
@Sirko 我明白
default JS array允许随机访问数据,而deque不允许从末尾添加、修改或删除 -
@AymanMorsy,如果这是您关心的问题,那么只需使可以在您的阵列上使用的所有其他方法无效。
-
一个JS数组支持你需要的所有方法。如果要抑制任何其他方法,那么您将需要一个包装器或类似的东西来限制访问(也可能是
map(),...)。
标签: javascript data-structures deque