📜  在 JavaScript 中仅使用两个堆栈实现入队和出队?(1)

📅  最后修改于: 2023-12-03 15:23:09.917000             🧑  作者: Mango

在 JavaScript 中仅使用两个堆栈实现入队和出队?

在 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();
}
总结

使用两个堆栈实现队列,可以避免使用传统的队列(数组或链表),提高代码的性能和灵活性。虽然这种方法并不能保证最优性,但它可以作为一种简单有效的实现方法。