使用兩個棧,乙個棧作為壓入棧stackpush,另乙個棧作為當要執行佇列的peek操作和poll操作的時候的壓出棧stackpop。
相當於沒執行poll或element操作之前,佇列中的資訊完全儲存在stackpush中。一旦要執行自定義佇列的poll操作或者element操作(poll和element操作像是trigger一樣),這時便是分岔口,需要將stackpush中的所有元素再次壓入stackpop中,來實現逆序,這時自定義佇列的資訊完全儲存在stackpop中。如果此時需要再向自定義佇列中offer元素,那麼只壓入到stackpush棧中,不對stackpop棧做任何操作,此時兩個棧加在一起是佇列的全部元素。只有當stackpop中的元素都pop出去之後,再將stackpush中的元素再次push到stackpop中。如此往復。
public class twostacksqueue
public void offer(int x)
public int poll()else if (stackpop.empty())
}return stackpop.pop();
}public int element()else if (stackpop.empty())
}return stackpop.peek();
}public boolean empty()
}
用兩個棧實現佇列 用兩個佇列實現棧
劍指offer 面試題7 用兩個棧實現佇列。templateclass cqueue 我們試著用兩個棧來模擬佇列的操作,發現如下可行操作 完整 實現 面試題7 用兩個棧實現佇列 分別完成在隊尾插入結點和在隊頭刪除結點的功能。date 2014 06 27 include include includ...
用佇列實現棧 用兩個棧實現佇列
用兩個棧來實現乙個佇列,完成佇列的push和pop操作。佇列中的元素為int型別。var cqueue function param value return this.stacka.push value return cqueue.prototype.deletehead function els...
用兩個棧實現佇列 用佇列實現棧
題目描述 示例 1 輸入 示例 2 輸入 思路 借用兩個棧,乙個為出棧,乙個為入棧,入棧只放入資料。當出棧為空時,將入棧中的資料全部放入到出棧中。class cqueue 時間複雜度o 1 void int value 時間複雜度o n intdeletehead int ret outstack....