以下为ChatGPT自动生成的解答,正确与否请自行判断。
BFE.devAI解答 - JavaScript 代码题
13. 利用栈(Stack)创建队列(Queue)
可以通过两个Stack来实现一个Queue,具体做法如下:
第一个Stack用于实现enqueue方法,每次调用enqueue时,将元素压入该Stack中。
第二个Stack用于实现dequeue和peek方法,每次调用这两个方法时,首先检查该Stack是否为空,如果为空,就将第一个Stack中的元素全部弹出并压入该Stack中,这样第二个Stack的栈顶元素就是第一个元素,可以相应地进行dequeue和peek操作。
代码实现如下:
class Stack {
constructor() {
this.items = []
}
push(element) {
this.items.push(element)
}
pop() {
return this.items.pop()
}
peek() {
return this.items[this.items.length - 1]
}
isEmpty() {
return this.items.length === 0
}
size() {
return this.items.length
}
}
class Queue {
constructor() {
this.stack1 = new Stack()
this.stack2 = new Stack()
}
enqueue(element) {
this.stack1.push(element)
}
dequeue() {
if (this.stack2.isEmpty()) {
while (!this.stack1.isEmpty()) {
this.stack2.push(this.stack1.pop())
}
}
return this.stack2.pop()
}
peek() {
if (this.stack2.isEmpty()) {
while (!this.stack1.isEmpty()) {
this.stack2.push(this.stack1.pop())
}
}
return this.stack2.peek()
}
size() {
return this.stack1.size() + this.stack2.size()
}
}
测试代码如下:
const queue = new Queue()
queue.enqueue(1)
queue.enqueue(2)
console.log(queue.peek()) // 1
queue.enqueue(3)
console.log(queue.dequeue()) // 1
console.log(queue.dequeue()) // 2
console.log(queue.peek()) // 3
queue.enqueue(4)
console.log(queue.size()) // 2
console.log(queue.dequeue()) // 3
console.log(queue.dequeue()) // 4
console.log(queue.size()) // 0