資料結構和演算法(六)佇列

wjaning發表於2021-09-09

佇列是一種操作受限的資料結構

用陣列實現的叫順序佇列,用連結串列實現的佇列叫鏈式佇列。

  1. 先進者先出這就是典型的佇列結構。

  2. 支援兩個操作,入隊enqueue(),放一個資料到隊尾;出隊dequeue(),從對頭取一個元素。

  3. 所以,和棧一樣,佇列也是一種操作受限的線性表。

二 如何實現佇列

1,佇列API

public interface Queue<T> {}

2.陣列實現

3.連結串列實現

4.迴圈列表

佇列的應用

  1. 阻塞佇列

    1)在佇列的基礎上增加阻塞操作,就成了阻塞佇列。

    2)阻塞佇列為空的時候,從隊頭取資料會被阻塞,因為此時還沒有資料可取,知道佇列中有了資料才能返回;如果有了資料才能返回;如果佇列已經滿了,那麼插入資料的操作就會阻塞,知道佇列中有空閒位置後再插入資料,然後在返回。

2.併發佇列

     1)在多執行緒的情況下,會有多個執行緒同時操作佇列,這時就會存線上程安全問題。能夠有效解決執行緒安全問題的佇列就稱為併發佇列。

  2) 併發佇列簡單的實現就是在enqueue(),dequeue()方法上加鎖,但是鎖粒度大併發會比較低,同一時候僅允許一個存或取操作。

3)實際上,基於陣列的迴圈佇列利用CAS原子操作,可以實現非常高效的併發佇列。這也是迴圈佇列比鏈式佇列應用更加廣泛的原因。

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/2983/viewspace-2823029/,如需轉載,請註明出處,否則將追究法律責任。

相關文章