棧:後進先出(想象乙個彈夾、或者桶,後放進去的元素,先被取出來),push、pop
佇列:先進先出(排隊,先來先服務),add、poll
底層可以用乙個雙向鍊錶實現棧和佇列。
也可以用陣列實現(為了簡單,可以只考慮容量固定的情況):
可以用乙個陣列實現棧:limit,index
可以用陣列,通過迴圈使用來實現佇列(環形緩衝區ringbuffer):limit,count,pushindex,pullindex。
1. 如何實現乙個棧,除了提供棧的基本操作外,還提供乙個獲取棧中最小元素的方法getmin(),要求此方法的時間複雜度為o(1)。
關鍵在於getmin()時間複雜度為o(1)。
實現:空間換時間——內部用2個棧來實現。其中乙個棧正常push和pop,另外乙個棧只push當前狀態下的最小值。getmin取第二個棧最頂上的元素(peek操作),即是o(1)時間複雜度的操作。
2. 如何只通過棧來實現佇列?
兩個棧互相倒騰(騰挪)來實現。
add操作只往其中乙個棧進行,一旦需要poll,判斷第二個棧如果為空,先將第乙個棧中所有元素push到第二棧中,然後從第二個棧pop。
3. 如何只通過佇列來實現棧?
兩個佇列互相倒騰(騰挪)來實現。
push到其中乙個佇列(叫做資料佇列)。
每次需要pop的時候,將當前的資料佇列(假設是a)中除最後乙個元素外,全部轉移到第二個佇列(b)中,然後從a佇列poll。這樣之後,b佇列變成資料佇列繼續。
演算法學習03 棧和佇列
巨集觀劃分問題 最優解來自於資料狀況或問法 鍊錶問題 筆試與面試要求不同 佇列結構的實現 迴圈佇列 最小棧的pop push getmin 操作的時間複雜度都是o 1 解法 儲存兩個棧,data棧和min棧,data棧儲存壓入的資料,min棧儲存當前棧中最小值 當向data壓入乙個數時,與min棧棧...
03 棧和佇列
定義字元陣列mid,post存放中綴表示式和字尾表示式 sqstack a 初始化a 最後出棧以 結束,先讓 入棧 遍歷中綴表示式,i 0 to len if mid i 是數字,則post j mid i 存放於post陣列中 else if mid i 是運算子,則判斷與棧中元素的優先順序,若優...
演算法 佇列,棧
佇列 當我們在火車站排隊時,第乙個排隊的人會第乙個買到票,而後面來的只能排在最後,這種情況就是佇列。c語言中也有相應的情況,如 現有一串加密的數字,你需要解密,規則如下 首先將第乙個數字刪除,然後將第二個數字放在最後一位上,再將第三個數字刪除並把第四個數字放在最後一位上,以此類推,知道剩下最後乙個數...