python的队列和栈
(一)队列和栈的区别
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())