用双栈实现队列
描述
实现 MyQueue 类:
void push(int x) 将元素 x 推到队列的末尾
int pop() 从队列的开头移除并返回元素
int peek() 返回队列开头的元素
boolean empty() 如果队列为空,返回 true ;否则,返回 false
思路
用数组,来表示栈,用push() pop() 方法来实现
双栈,两个数组,将一个栈 stack1当作输入栈,用于压入 push 传入的数据;
另一个栈当作stack2 输出栈,用于 pop 和 peek 操作。
pop 时,先把stack1 全部倒入stack2 然后返回最后一个元素,就是队列顶部元素,此时stack1 为空了,stack2 存储了全部的元素
peek 时,先看stack2 中是否有无元素,如果有,直接返回最后一个。如果stack2 为空,则说明此时元素都在stack1中,返回第一个即可
代码实现
var MyQueue = function() { this.stack1 = [] this.stack2 = [] }; /** * @param {number} x * @return {void} */ MyQueue.prototype.push = function(x) { this.stack1.push(x) }; /** * @return {number} */ MyQueue.prototype.pop = function() { if(!this.stack2.length){ while(this.stack1.length){ this.stack2.push(this.stack1.pop()) } } return this.stack2.pop() }; /** * @return {number} */ MyQueue.prototype.peek = function() { if(this.stack2.length){ return this.stack2[this.stack2.length-1] }else{ return this.stack1[0] } }; /** * @return {boolean} */ MyQueue.prototype.empty = function() { return this.stack1.length === 0 };