erlang 佇列(queue)模組

2021-10-16 03:43:46 字數 1757 閱讀 4869

queue模組部分api說明

新建乙個佇列,返回兩個為空的列表組成的元組

是否是佇列,通過判斷元組是否由兩個列表組成

是否為空佇列,通過判斷兩個列表是否為空

佇列長度,通過獲取兩個列表長度相加實現

佇列轉為列表,由out列表拼接反轉後的in列表實現

列表轉為佇列,呼叫了f2r

f2r([

])->

;f2r

([_]

=f)->

;f2r

([x,y]

)->

;f2r

(list)

->

= lists:

split

(length

(list) div 2+1

, list)

,.

其中分幾種情況

1、列表為空,則返回空佇列

2、列表只有乙個元素時放入in,兩個元素時,按序放入out、in

3、元素數量》=3,則將列表根據列表長度進行分割,分割成in、out列表

將元素放在佇列尾部,存元素x時將元素放進in列表中([x|in]),當out為空時則將in替換out,這樣效率會更高,因為佇列是先進先出的,當out不是空列表取out列表第乙個元素即可

與queue:in類似,不過是將元素放在佇列頭部。關於從佇列中獲取元素還有get、get_r、peek、peek_r這幾個方法都是從佇列中獲取元素,但是不會返回新的佇列

我在原始碼上加了注釋,由以下原始碼,很清晰的可以看出佇列是怎麼取出元素的

-spec out

(q1 :

:queue

(item)

)->

, q2 :

:queue

(item)}|

.out

(=q)

->

;out()

->,}

;out()

->

[v|out]

= lists:

reverse

(in,

),%% 反轉後下次取元素直接取out的頭元素

,};out

() when is_list

(in)

->

%% 取完out為空時,呼叫r2f()

,作用是將in的一半元素擷取出來反轉形成out,下次取元素就很方便

,r2f

(in)};

out(

) when is_list

(in)

->

%% 直接從out中取出頭元素,它一定是最早進去的

,};out

(q)->

erlang:

error

(badarg,

[q])

.

queue:out_r(queue) 與queue:out類似,不過取出來的是尾部元素

佇列是否包含此元素,通過判斷兩個列表是否包含此元素實現

刪除佇列第乙個元素並返回新的佇列

queue:drop_r(queue) -> queue | badarg 則是刪除佇列最後乙個元素並返回新的佇列

將佇列反轉,實現方式是queue = , newqueue =

合併兩個佇列

如果需求是需要按照順序先進先出的取出資料,用佇列是很高效的

Python 佇列模組 Queue

佇列queue模組 管道 subprocess stdin stdout stderr 佇列 管道 鎖 佇列 先進先出 堆疊 先進後出 from multiprocessing import queue 建立乙個佇列 q queue 5 括號內可以傳數字 標示生成的佇列最大可以同時存放的資料量 往佇...

同步佇列 Queue模組解析

queue模組解決了生產者 消費者問題,在多執行緒程式設計中進行執行緒通訊的時候尤其有用,queue類封裝了加鎖解鎖的過程。在queue模組中有三種不同的佇列類,區別是不同佇列取出資料的順序不同。在fifo佇列中,先存進去的資料最先取出來。而在lifo佇列中,最後存進去的資料最取出來。在加權佇列中,...

Python 原始碼分析 queue 佇列模組

起步 queue 模組提供適用於多執行緒程式設計的先進先出 fifo 資料結構。因為它是執行緒安全的,所以多個執行緒很輕鬆地使用同乙個例項。原始碼分析 先從初始化的函式來看 從這初始化函式能得到哪些資訊呢?首先,佇列是可以設定其容量大小的,並且具體的底層存放元素的它使用了collections.de...