返回
每日一题 剑指offer javascript版 用两个栈实现队列
前端
2023-10-12 04:57:32
正文
在日常的开发中,我们经常会遇到队列这种数据结构。队列是一种先进先出的数据结构,类似于现实生活中的排队。为了实现队列,我们可以使用数组或链表等数据结构。但是,如果我们只能使用两个栈,该如何实现队列呢?
用两个栈实现队列
要使用两个栈实现队列,我们可以使用一个栈作为输入栈,另一个栈作为输出栈。当我们向队列中添加元素时,我们将元素压入输入栈。当我们从队列中删除元素时,我们将输入栈中的所有元素弹出并压入输出栈,然后从输出栈中弹出元素。
代码实现
class Queue {
constructor() {
this.inputStack = [];
this.outputStack = [];
}
appendTail(element) {
this.inputStack.push(element);
}
deleteHead() {
if (this.outputStack.length === 0) {
while (this.inputStack.length > 0) {
this.outputStack.push(this.inputStack.pop());
}
}
if (this.outputStack.length === 0) {
return -1;
}
return this.outputStack.pop();
}
}
时间复杂度
appendTail
操作的时间复杂度为 O(1)。deleteHead
操作的时间复杂度为 O(n),其中 n 为队列中元素的个数。
空间复杂度
空间复杂度为 O(n),其中 n 为队列中元素的个数。
示例
const queue = new Queue();
queue.appendTail(1);
queue.appendTail(2);
queue.appendTail(3);
console.log(queue.deleteHead()); // 1
console.log(queue.deleteHead()); // 2
console.log(queue.deleteHead()); // 3
console.log(queue.deleteHead()); // -1
总结
使用两个栈实现队列是一种巧妙的方法。虽然时间复杂度较差,但空间复杂度较好。在实际开发中,如果需要经常添加和删除元素,可以使用数组或链表等数据结构实现队列。如果内存受限,可以使用两个栈实现队列。