標籤:出錯 style err 前端 用兩個 棧實現隊列 his int 刪除
用兩個棧實現隊列題目描述
用兩個棧來實現一個隊列,完成隊列的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直接出棧。
相關知識
棧(stack)又名堆棧,它是一種運算受限的線性表。其限制是僅允許在表的一端進行插入和刪除運算。這一端被稱為棧頂,相對地,把另一端稱為棧底。向一個棧插入新元素又稱作進棧、入棧或壓棧,它是把新元素放到棧頂元素的上面,使之成為新的棧頂元素;從一個棧刪除元素又稱作出棧或退棧,它是把棧頂元素刪除掉,使其相鄰的元素成為新的棧頂元素。
隊列是一種特殊的線性表,特殊之處在於它只允許在表的前端(front)進行刪除操作,而在表的後端(rear)進行插入操作。進行插入操作的端稱為隊尾,進行刪除操作的端稱為隊頭。
《劍指offer》— JavaScript(5)用兩個棧實現隊列