📅  最后修改于: 2023-12-03 15:23:09.917000             🧑  作者: Mango
在 JavaScript 中,实现队列可以使用两个堆栈。这样做是通过将一个堆栈用于入队,另一个用于出队。这种方法不需要使用数组或链表作为存储队列元素的容器,而使用堆栈来实现同样的功能。
用于入队的堆栈,在入队操作时会将元素压入堆栈中,并且保证最早入队的元素在堆栈的底部。这样实现的好处是,最近入队的元素总是位于堆栈的顶部,可以很容易地通过出栈操作找到。
let inStack = [];
function enqueue(item) {
inStack.push(item);
}
用于出队的堆栈,在出队操作时会先检查它是否为空。如果不为空,则直接弹出它的顶部元素;否则,将入队堆栈中的所有元素出栈并依次压入出队堆栈,这样顶部元素就变为最早入队的元素了。接着,再弹出顶部元素即可。
let outStack = [];
function dequeue() {
if (outStack.length === 0) {
while (inStack.length > 0) {
outStack.push(inStack.pop());
}
}
return outStack.pop();
}
使用两个堆栈实现队列,可以避免使用传统的队列(数组或链表),提高代码的性能和灵活性。虽然这种方法并不能保证最优性,但它可以作为一种简单有效的实现方法。