常用的資料結構有很多種,但大多數都是以陣列或鍊錶作為儲存方式,陣列和鍊錶可以看做是資料儲存的「物理結構」,棧和佇列這兩者屬於邏輯結構,它們的物理實現既可以利用陣列,也可以利用鍊錶來完成。
棧是一種線性資料結構,它的元素是先進後出。出棧入棧的時間複雜度都是o(1),佇列也是一種線性資料結構,佇列中的元素只能先進先出,入隊和出隊的時間複雜度也是o(1)。
棧的應用場景:棧的輸出順序和輸入順序相反,所以經常用棧來回溯歷史,實現遞迴的邏輯就是用棧的回溯方法。棧還有乙個著名的應用場景就是麵包屑導航,使用者在瀏覽頁面時可以輕鬆地回溯到上一級或更上一級頁面。
佇列的輸入順序和輸出順序相同,所以佇列通常對於歷史的回放,就是把歷史重演一遍。例如在多執行緒中,爭奪公平鎖的等待佇列,就是按照訪問順序來決定執行緒在佇列中的次序的。再入網路爬蟲實現**抓取時,也是把待抓取的**url存入佇列中,再按照存入的順序來依次抓取和解析的。
雙端佇列可以實現棧和佇列的雙重特點,對雙端佇列來說,可以從隊頭入隊或出隊,也可以從隊尾入隊或出隊,關於雙端佇列的更多細節請大家自行查閱資料以作了解。
棧和佇列總結
使用標準庫的棧 include 標頭檔案 stacks 定義乙個 int 型的棧 s.empty 如果棧為空返回true,否則返回false s.size 返回棧中元素的個數 s.pop 刪除棧頂元素但不返回其值 s.top 返回棧頂的元素,但不刪除該元素 s.push 在棧頂壓入新元素 使用標準庫...
棧和佇列總結
棧佇列 特點後進先出 先進先出 定義stackstack new stack queuequeue new linkedlist 入s.push q.offer 出s.pop 同時返回棧頂元素 q.poll 同時返回隊頭元素 頂s.peek q.peek 佇列頭部元素 注意 在佇列中 add 和re...
棧和佇列總結
棧繼承自vector,stack只有乙個空參構造方法,因此想往其中新增元素只能使用方法push 常用方法如下 public e push e item 入棧 public e pop 出棧 public e peek 檢視棧頂元素 public boolean empty 是否為空 注意在使用棧時,...