以下为ChatGPT自动生成的解答,正确与否请自行判断。

BFE.devAI解答 - JavaScript 代码题
108. 用队列(Queue)实现栈(Stack)

解法一:使用两个Queue

可以使用两个Queue,一个用于存储数据,另一个用于临时保存数据。在每次push操作时,将元素加入到临时Queue中,再将数据Queue中的元素依次出队并加入到临时Queue中,确保新加入的元素在Queue头部。最后将临时Queue赋值给数据Queue。pop操作则直接从数据Queue头部出队即可。

代码实现如下:

class Stack {
  constructor() {
    this.data = new Queue();
    this.temp = new Queue();
  }
  push(element) {
    this.temp.enqueue(element);
    while (this.data.size()) {
      this.temp.enqueue(this.data.dequeue());
    }
    [this.data, this.temp] = [this.temp, this.data];
  }
  pop() {
    return this.data.dequeue();
  }
  peek() {
    return this.data.peek();
  }
  size() {
    return this.data.size();
  }
}

解法二:使用一个Queue

也可以使用一个Queue,但需要对队列进行一定的操作。在每次push操作时,先获取当前Queue的长度n,将新元素加入到Queue的尾部,再将前面n个元素依次取出加入到Queue的尾部。这样能够确保新加入的元素在Queue头部。pop操作则直接出队头部元素即可。

代码实现如下:

class Stack {
  constructor() {
    this.data = new Queue();
  }
  push(element) {
    const n = this.data.size();
    this.data.enqueue(element);
    for (let i = 0; i < n; i++) {
      this.data.enqueue(this.data.dequeue());
    }
  }
  pop() {
    return this.data.dequeue();
  }
  peek() {
    return this.data.peek();
  }
  size() {
    return this.data.size();
  }
}

两种解法的时间复杂度都是O(n),其中n为Stack中元素的个数。