题目源地址:面试题 03.04. 化栈为队 难度:简单
题目要求
- 你只能使用标准的栈操作 -- 也就是只有 push to top, peek/pop from top, size 和 is empty 操作是合法的。
- 你所使用的语言也许不支持栈。你可以使用 list 或者 deque(双端队列)来模拟一个栈,只要是标准的栈操作即可。
- 假设所有操作都是有效的 (例如,一个空的队列不会调用 pop 或者 peek 操作)。
解题使用的编程语言为javascript
首先得明白栈是先进后出,队列是先进先出。因为使用的是javascript语言,所以可以用数组替代栈
基于题目要求
我们可以使用数组自带的属性和方法有:
length: 设置或者返回元素的个数。
pop():删除数组的最后一个元素并且返回删除的元素。
push(): 向数组的末尾添加一个或更多元素,并返回新的长度。
看图解:
判断队列是否为空?直接判断数组stackIn是否为空即可。
附上完整代码
var MyQueue = function() {
this.stackIn =[];
this.stackOut = [];
};
MyQueue.prototype.push = function(x) {
this.stackIn.push(x);
};
MyQueue.prototype.pop = function() {
while(this.stackIn.length != 1){
this.stackOut.push(this.stackIn.pop())
}
let temp = this.stackIn.pop();
while(this.stackOut.length !=0){
this.stackIn.push(this.stackOut.pop())
}
return temp;
};
MyQueue.prototype.peek = function() {
while(this.stackIn.length != 0){
this.stackOut.push(this.stackIn.pop())
}
let temp = this.stackOut[this.stackOut.length - 1];
while(this.stackOut.length !=0){
this.stackIn.push(this.stackOut.pop())
}
return temp;
};
MyQueue.prototype.empty = function() {
if(this.stackIn.length!=0){
return false;
}else{
return true;
}
};