用两个栈实现一个队列的功能?要求给出算法和思路!
<分析>:
入队:将元素进栈A
出队:判断栈B是否为空,如果为空,则将栈A中所有元素pop,并push进栈B,栈B出栈;
如果不为空,栈B直接出栈。
var inStack = [],
outStack = [];
function push(node) {
// write code here
inStack.push(node);
}
function pop() {
// write code here
if (!outStack.length) {
while (inStack.length) {
outStack.push(inStack.pop());
}
}
return outStack.pop();
}
但是要考虑 pop() 时两个栈为空的处理呀。。 js 是默认返回 undefined ,其他静态语言比如 C++ 我记得会运行时异常吧
用两个队列实现一个栈的功能?要求给出算法和思路!
<分析>:
入栈:将元素进队列A
出栈:判断队列A中元素的个数是否为1,如果等于1,则出队列,否则将队列A中的元素 以此出队列并放入队列B,直到队列A中的元素留下一个,然后队列A出队列,再把队列B中的元素出队列以此放入队列A中。
var queue1 = [],
queue2 = [];
function push() {
queue1.push();
}
function pop() {
if(!queue2.length){//queue2是空的
while(queue1.length!=1){
queue2.push(queue1.shift());
}
}
//再把队列2中的元素全部放回1中,倒两次
while(queue2.length){
queue1.push(queue2.shift());
}
return queue1.shift();
}
queue1 = [1,5,3,7,8];
console.log(pop(),pop(),pop());
注意:(1)判断当两个队列都为空时,抛出异常,不出队列
(2)判断当队列A为一个元素时,出队
(3)再把队列2中的元素全部放回1中,倒两次,以便下次输出元素
参考:https://www.nowcoder.com/questionTerminal/54275ddae22f475981afa2244dd448c6