隊列(Queue)\雙端隊列(Deque)
隊列(Queue)
特點:
和棧不同,隊列的最大特點是先進先出(FIFO),就好像按順序排隊一樣。對於隊列的數據,我們只允許在隊尾查看和添加數據,在隊頭查看和刪除數據。
實現:
可以借助雙端隊列來實現隊列。雙鏈表的頭指針允許在隊頭查看和刪除數據,而雙鏈表的尾指針允許我們在隊尾查看和添加數據。
應用場景:
當我們需要按照一定的順序來處理數據,而該數據的數據量在不斷變化的時候,則需要隊列來幫助解題。在算法面試中,廣度優先搜索是運用隊列最多的地方。
雙端隊列(Deque)
特點:
雙端隊列和普通隊列最大的不同在於,它允許我們在隊列的頭尾兩端都能在O(1)的時間內進行數據的查看、添加和刪除。
實現:
與隊列相似,我們可以利用一個雙鏈表實現雙端隊列。
應用場景:
雙端隊列最常用的地方就是實現一個長度動態變化的窗口或者連續區間,而動態窗口這種數據結構在很多題目中都有運用。
算法應用
LeetCoded第239題題解–滑動窗口最大值
LeetCoded第933題題解–最近的請求次數
LeetCoded第621題題解–任務調度器
LeetCoded第642題題解–設計循環雙端隊列