两个队列实现一个栈

用两个栈实现一个队列的功能?要求给出算法和思路!

<分析>:
入队:将元素进栈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

发布了179 篇原创文章 · 获赞 82 · 访问量 55万+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章