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