【发布时间】:2018-01-24 01:30:19
【问题描述】:
我正在学习算法和 DS。如何在 JavaScript 中使用队列?
我知道你可以做这样的事情。
var stack = [];
stack.push(2); // stack is now [2]
stack.push(5); // stack is now [2, 5]
var i = stack.pop(); // stack is now [2]
alert(i); // displays 5
var queue = [];
queue.push(2); // queue is now [2]
queue.push(5); // queue is now [2, 5]
var i = queue.shift(); // queue is now [5]
alert(i); // displays 2
但 shift() 不会改变一切因此,时间复杂度是 O(N) 而不是 Java 中的 Dequeue 是 O(1)
为什么JavaScript原生没有像Stack(array)这样的Queue的概念?
我只是好奇。请赐教。
(我问自己这个问题,但找不到正当理由说明为什么 ES8 或 ES9 会使用 Dequeue O(1) 和 enqueue O(1) 内置队列而无需自己实现)
PS:很抱歉问了这么愚蠢的问题,但这让我很头疼!
【问题讨论】:
-
正如您所提到的,Array 被设计为一个非常灵活的对象,您可以通过调用不同的方法来模拟数组、堆栈和队列操作。我认为这种操作的时间复杂度不是 O(N)。
-
任何 shift 或 unshift() 操作都会重新创建数组。因此,如果我没记错的话,它将是 O(N)。
-
你怎么知道 JS 实现没有优化
.shift()以不重建整个数组? -
https://stackoverflow.com/questions/22614237/javascript-runtime-complexity-of-array-functionsShift 是 O(1) 仅在特殊情况下 -
@djna 是的,这就是所谓的墨菲定律,:-)
标签: javascript queue