1. 程式人生 > >python的隊列和棧

python的隊列和棧

lan 不出 sin print wait 交換 數據交換 線性表 數據

(一)隊列和棧的區別

1、隊列:

隊列是一種特殊的線性表。其兩頭都有限制,插入只能在表的一端進行(只進不出),而刪除只能在表的另一端進行(只出不進),允許刪除的一端稱為隊尾(rear),允許插入的一端稱為隊頭 (Front)。

先進先出(First In First Out),FIFO

2、棧:

棧是一種特殊的線性表。其特殊性在於限定插入和刪除數據元素的操作只能在線性表的一端進行。

後進先出(Last In First Out),LIFO

3、其他:

隊列是線程間最常用的交換數據的形式。
在python中,多個線程之間的數據是共享的,多個線程進行數據交換的時候,不能夠保證數據的安全性和一致性,所以當多個線程需要進行數據交換的時候,隊列就出現了,隊列可以完美解決線程間的數據交換,保證線程間數據的安全性和一致性。

(二)隊列和棧的方法小結

Queue.Queue(maxsize=0) 創建隊列,FIFO, 如果maxsize小於1就表示隊列長度無限。
Queue.LifoQueue(maxsize=0) 創建棧,LIFO, 如果maxsize小於1就表示隊列長度無限。


Queue.qsize() 返回隊列的大小
Queue.empty() 如果隊列為空,返回True,反之False
Queue.full() 如果隊列滿了,返回True,反之False
Queue.get([block[, timeout]]) 出隊,讀隊列,timeout等待時間。非阻塞get_nowait(),相當於get(block=False)
Queue.put(item, [block[, timeout]]) 入隊,寫隊列,timeout等待時間。非阻塞put_nowait(),相當於put("xxx",block=False)
Queue.queue.clear() 清空隊列

參考:

https://www.cnblogs.com/wt11/p/5952500.html

(三)隊列

# from multiprocessing import Queue
from queue import Queue

# 創建一個長度為5的隊列
q = Queue(5)

# 判隊空
print(q.empty())
# 入隊:向隊列中添加元素
q.put(1)
q.put("abc")
q.put([1, 2, 3])
q.put({"a": 123})
q.put((1, 2))
# 判隊滿
print(q.full())
# 量隊
print(q.qsize())

# 出隊:從隊列中取出元素
print(q.get())
print(q.get())
print(q.get())
print(q.get())
print(q.get())
# 判斷隊空
print(q.empty())
# 量隊
print(q.qsize())
# 非阻塞入隊
q.put_nowait(6)
# 非阻塞出隊
print(q.get_nowait())

  

(四)棧

from queue import LifoQueue

# 定義一個5長度的棧
s = LifoQueue(5)
# 進棧:向棧中添加元素
s.put(1)
s.put(2)
s.put(3)
s.put(4)
s.put(5)
# 判棧滿
print(s.full())
# 量棧
print(s.qsize())

# 退棧:從棧中取出元素
print(s.get())
print(s.get())
print(s.get())
print(s.get())
print(s.get())

# 判棧空
print(s.empty())
# 量棧
print(s.qsize())

  

python的隊列和棧