以下为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中元素的个数。