您现在的位置:首页 >> 前端 >> 内容

如何用两个栈实现一个队列的功能?

时间:2017/10/12 9:21:00 点击:

  核心提示:如何用两个栈实现一个队列的功能??要求给出算法和思路!分析:入队:将元素进栈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中,倒两次,以便下次输出元素

作者:网络 来源:初漾的博客