資料結構和演算法(六)佇列
佇列是一種操作受限的資料結構
用陣列實現的叫順序佇列,用連結串列實現的佇列叫鏈式佇列。
先進者先出這就是典型的佇列結構。
支援兩個操作,入隊enqueue(),放一個資料到隊尾;出隊dequeue(),從對頭取一個元素。
所以,和棧一樣,佇列也是一種操作受限的線性表。
二 如何實現佇列
1,佇列API
public interface Queue<T> {}
2.陣列實現
3.連結串列實現
4.迴圈列表
佇列的應用
-
阻塞佇列
1)在佇列的基礎上增加阻塞操作,就成了阻塞佇列。
2)阻塞佇列為空的時候,從隊頭取資料會被阻塞,因為此時還沒有資料可取,知道佇列中有了資料才能返回;如果有了資料才能返回;如果佇列已經滿了,那麼插入資料的操作就會阻塞,知道佇列中有空閒位置後再插入資料,然後在返回。
2.併發佇列
1)在多執行緒的情況下,會有多個執行緒同時操作佇列,這時就會存線上程安全問題。能夠有效解決執行緒安全問題的佇列就稱為併發佇列。
2) 併發佇列簡單的實現就是在enqueue(),dequeue()方法上加鎖,但是鎖粒度大併發會比較低,同一時候僅允許一個存或取操作。
3)實際上,基於陣列的迴圈佇列利用CAS原子操作,可以實現非常高效的併發佇列。這也是迴圈佇列比鏈式佇列應用更加廣泛的原因。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/2983/viewspace-2823029/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 資料結構與演算法—稀疏陣列和佇列資料結構演算法陣列佇列
- 資料結構與演算法——佇列(環形佇列)資料結構演算法佇列
- 資料結構—棧和佇列資料結構佇列
- 資料結構(棧和佇列)資料結構佇列
- 《資料結構與演算法》——表、棧和佇列資料結構演算法佇列
- 資料結構與演算法-佇列資料結構演算法佇列
- 三、資料結構演算法-棧、佇列、優先佇列、雙端佇列資料結構演算法佇列
- javascript資料結構與演算法-佇列JavaScript資料結構演算法佇列
- 資料結構與演算法分析——佇列資料結構演算法佇列
- 資料結構-佇列資料結構佇列
- 【資料結構-----佇列】資料結構佇列
- 資料結構 - 佇列資料結構佇列
- 資料結構二之棧和佇列資料結構佇列
- 【資料結構】棧(Stack)和佇列(Queue)資料結構佇列
- Java版-資料結構-佇列(陣列佇列)Java資料結構佇列陣列
- python資料結構與演算法——棧、佇列與雙端佇列Python資料結構演算法佇列
- python演算法與資料結構-佇列(44)Python演算法資料結構佇列
- 資料結構與演算法-棧與佇列資料結構演算法佇列
- 資料結構之「佇列」資料結構佇列
- 資料結構-佇列-樹資料結構佇列
- 資料結構-佇列、棧資料結構佇列
- 結構與演算法(02):佇列和棧結構演算法佇列
- JavaScript 的資料結構和演算法 - 佇列篇 (附程式碼)JavaScript資料結構演算法佇列
- Python資料結構與演算法系列四:棧和佇列Python資料結構演算法佇列
- 前端學習 資料結構與演算法 快速入門 系列 —— 佇列和雙端佇列前端資料結構演算法佇列
- 畫江湖之資料結構【第二話:佇列和棧】佇列資料結構佇列
- 畫江湖之資料結構 [第二話:佇列和棧] 佇列資料結構佇列
- Java版-資料結構-佇列(迴圈佇列)Java資料結構佇列
- 資料結構-js實現棧和佇列資料結構JS佇列
- 資料結構與演算法(二)佇列、棧、連結串列資料結構演算法佇列
- 【資料結構】棧和佇列的總結對比資料結構佇列
- 資料結構-棧與佇列資料結構佇列
- js資料結構--佇列(queue)JS資料結構佇列
- JavaScript資料結構03 - 佇列JavaScript資料結構佇列
- JavaScript資料結構之-佇列JavaScript資料結構佇列
- JavaScript資料結構03 – 佇列JavaScript資料結構佇列
- JavaScript資料結構之佇列JavaScript資料結構佇列
- 資料結構筆記——佇列資料結構筆記佇列