《劍指offer》— JavaScript(5)用兩個棧實現隊列

用兩個棧實現隊列

題目描述

  用兩個棧來實現一個隊列,完成隊列的Push和Pop操做。 隊列中的元素爲int類型。前端


實現代碼

function Stack(){
    var items=[];
    this.push=function(item){
        items.push(item);
    }
    this.pop=function(){
        return items.pop();
    }
    this.isEmpty=function(){
        return items.length==0;
    }
}


var stack1= new Stack();
var stack2= new Stack();

function push(node)
{
    stack1.push(node);
}
function pop()
{   
    //若是都爲空,拋出錯誤
    if(stack1.isEmpty() && stack2.isEmpty()){
        throw new Error("Queue is empty");
    }
   // 若是棧2是空,那麼將棧1全部元素出棧,一次放入棧2
    if(stack2.isEmpty()){
        while(!stack1.isEmpty()){
             stack2.push(stack1.pop())
        }
    }
   //若是棧2不爲空,直接出棧
    return stack2.pop();
}

思路

  入隊:將元素進棧1;
  出隊:判斷棧2是否爲空,若是爲空,則將棧1中全部元素pop,並push進棧2,棧2出棧; 若是不爲空,棧2直接出棧。node

相關知識

  棧(stack)又名堆棧,它是一種運算受限的線性表。其限制是僅容許在表的一端進行插入和刪除運算。這一端被稱爲棧頂,相對地,把另外一端稱爲棧底。向一個棧插入新元素又稱做進棧、入棧或壓棧,它是把新元素放到棧頂元素的上面,使之成爲新的棧頂元素;從一個棧刪除元素又稱做出棧或退棧,它是把棧頂元素刪除掉,使其相鄰的元素成爲新的棧頂元素。
  隊列是一種特殊的線性表,特殊之處在於它只容許在表的前端(front)進行刪除操做,而在表的後端(rear)進行插入操做。進行插入操做的端稱爲隊尾,進行刪除操做的端稱爲隊頭。後端

相關文章
相關標籤/搜索