使用栈实现队列的下列操作:
push(x) -- 将一个元素放入队列的尾部。 pop() -- 从队列首部移除元素。 peek() -- 返回队列首部的元素。 empty() -- 返回队列是否为空。 示例:
MyQueue queue = new MyQueue();
queue.push(1); queue.push(2); queue.peek(); // 返回 1 queue.pop(); // 返回 1 queue.empty(); // 返回 false
来源:力扣(LeetCode) 链接:https://leetcode.cn/problems/implement-queue-using-stacks 著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
两个栈
第一个栈用于反转元素顺序 第二个栈用于存储反转后的元素
入队:第二个栈先进到第一个栈里,然后新元素入到第二个栈,第一个栈回到第二个栈 出队:直接从第二个栈弹出 peek() -- 返回队列首部的元素。直接返回第二个栈顶部元素 empty() -- 返回队列是否为空。判断第二个栈是否为空
/**
* Initialize your data structure here.
*/
var MyQueue = function () {
this.reverse = [];
this.store = [];
};
/**
* Push element x to the back of queue.
* @param {number} x
* @return {void}
*/
MyQueue.prototype.push = function (x) {
while (this.store.length > 0) {
this.reverse.push(this.store.pop());
}
this.store.push(x);
while (this.reverse.length > 0) {
this.store.push(this.reverse.pop());
}
};
/**
* Removes the element from in front of queue and returns that element.
* @return {number}
*/
MyQueue.prototype.pop = function () {
return this.store.pop();
};
/**
* Get the front element.
* @return {number}
*/
MyQueue.prototype.peek = function () {
return this.store[this.store.length - 1];
};
/**
* Returns whether the queue is empty.
* @return {boolean}
*/
MyQueue.prototype.empty = function () {
return 0 == this.store.length;
};
/**
* Your MyQueue object will be instantiated and called as such:
* var obj = new MyQueue()
* obj.push(x)
* var param_2 = obj.pop()
* var param_3 = obj.peek()
* var param_4 = obj.empty()
*/