數據結構筆記淺記(十一) 單向隊列

「隊列 queue」是一種遵循先入先出規則的線性數據結構。顧名思義,隊列模擬了排隊現象,即新來的人不斷 加入隊列尾部,而位於隊列頭部的人逐個離開。

在 Python 中,我們一般將雙向隊列類 deque 當作隊列使用 ,雖然 queue.Queue() 是純正的隊列類,但不太好用,因此不推薦

鏈表和數組都可以實現隊列。

基於鏈表的實現:我們可以將鏈表的“頭節點”和“尾節點”分別視爲“隊首”和“隊尾”,規定隊尾僅可添加 節點,隊首僅可刪除節點

基於數組的實現:在數組中刪除首元素的時間複雜度爲 𝑂(𝑛) ,這會導致出隊操作效率較低。然而,我們可以採用以下巧妙方 法來避免這個問題。 我們可以使用一個變量 front 指向隊首元素的索引,並維護一個變量 size 用於記錄隊列長度。定義 rear = front + size ,這個公式計算出的 rear 指向隊尾元素之後的下一個位置。 基於此設計,數組中包含元素的有效區間爲 [front, rear - 1],各種操作的實現方法如圖 5‑6 所示。

        ‧ 入隊操作:將輸入元素賦值給 rear 索引處,並將 size 增加 1 。

         ‧ 出隊操作:只需將 front 增加 1 ,並將 size 減少 1 。

可以看到,入隊和出隊操作都只需進行一次操作,時間複雜度均爲 𝑂(1)

隊列典型應用

‧ 淘寶訂單。購物者下單後,訂單將加入隊列中,系統隨後會根據順序處理隊列中的訂單。在雙十一期 間,短時間內會產生海量訂單,高併發成爲工程師們需要重點攻克的問題。

‧ 各類待辦事項。任何需要實現“先來後到”功能的場景,例如打印機的任務隊列、餐廳的出餐隊列等, 隊列在這些場景中可以有效地維護處理順序。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章