兩個隊列實現一個棧

用兩個棧實現一個隊列的功能?要求給出算法和思路!

<分析>:
入隊:將元素進棧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萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章