(一)队列和栈的区别

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())

  

最新文章

  1. java类的加载机制
  2. getSlotFromBufferLocked: unknown buffer: 0xf3d94ca0
  3. windows页面打印div(弹出新页面)
  4. dede自定义表单增加添加时间怎么弄
  5. [实变函数]2.3 开集 (open set), 闭集 (closed set), 完备集 (complete set)
  6. MySQL 使用while语句向数据表中批量插入数据
  7. VS2015在对GIT的支持
  8. 汇农PC个人中心总结
  9. javascript获取整数随机数
  10. 自己写的书《深入理解Android虚拟机内存管理》,不出版只是写着玩
  11. ActiveReports 6:如何升级旧版本的项目
  12. [文摘]Quick Start to Client side COM and Python
  13. 一招明白URL和URI的区别
  14. MVC中一般为什么用IQueryable而不是用IList?
  15. 第三节:工厂+反射+配置文件(手写IOC)对缓存进行管理。
  16. PhpStorm 中切换PHP版本
  17. Android 关于虹软人脸识别SDK引擎使用总结
  18. shiro中INI配置
  19. Tkinter添加图片
  20. CentOS7安装MYSQL。

热门文章

  1. 字符串时间与Unix时间戳相互转换
  2. Android TextView文字空格
  3. js的微任务和宏任务
  4. 如何用Baas快速在腾讯云上开发小程序-系列2:搭建Phabricator开发管理平台
  5. css3整理--Animation
  6. Unity3D Shader 马赛克后期效果
  7. Redis 下载与安装(Windows版)
  8. rx.js 的冷和热观察
  9. js函数 test.caller 谁在调用test函数
  10. WordOperate