核心提示:如何用两个栈实现一个队列的功能??要求给出算法和思路!分析:入队:将元素进栈A出队:判断栈B是否为空,如果为空,则将栈A中所有元素pop,并push进栈B,栈B出栈;如果不为空,栈B直接出栈。var ...
如何用两个栈实现一个队列的功能??要求给出算法和思路!
<分析>:
入队:将元素进栈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中,倒两次,以便下次输出元素