操作

  • Queue() 创建一个空的队列
  • enqueue(item) 往队列中添加一个item元素
  • dequeue() 从队列头部删除一个元素
  • is_empty() 判断一个队列是否为空
  • size() 返回队列的大小
class Queue(object):"""队列"""def __init__(self):self.items = []def is_empty(self):return self.items == []def enqueue(self, item):"""进队列"""self.items.insert(0,item)def dequeue(self):"""出队列"""return self.items.pop()def size(self):"""返回大小"""return len(self.items)if __name__ == "__main__":q = Queue()q.enqueue("hello")q.enqueue("world")q.enqueue("itcast")print q.size()print q.dequeue()print q.dequeue()print q.dequeue()

烫手山芋

from pythonds.basic.queue import Queuedef hotPotato(namelist, num):simqueue = Queue()for name in namelist:simqueue.enqueue(name)while simqueue.size() > 1:for i in range(num):simqueue.enqueue(simqueue.dequeue())simqueue.dequeue()return simqueue.dequeue()print(hotPotato(["Bill","David","Susan","Jane","Kent","Brad"],7))

模拟:打印机

主要模拟步骤

  1. 创建打印任务的队列,每个任务都有个时间戳。队列启动的时候为空。
  2. 每秒(currentSecond):

    • 是否创建新的打印任务?如果是,将 currentSecond 作为时间戳添加到队列。
    • 如果打印机不忙并且有任务在等待
      • 从打印机队列中删除一个任务并将其分配给打印机
      • 从 currentSecond 中减去时间戳,以计算该任务的等待时间。
      • 将该任务的等待时间附件到列表中稍后处理。
      • 根据打印任务的页数,确定需要多少时间。
    • 打印机需要一秒打印,所以得从该任务的所需的等待时间减去一秒。
    • 如果任务已经完成,换句话说,所需的时间已经达到零,打印机空闲。
  3. 模拟完成后,从生成的等待时间列表中计算平均等待时间。
# 模拟打印机
class Printer:def __init__(self, ppm):self.pagerate = ppmself.currentTask = Noneself.timeRemaining = 0def tick(self):if self.currentTask != None:self.timeRemaining = self.timeRemaining - 1if self.timeRemaining <= 0:self.currentTask = Nonedef busy(self):if self.currentTask != None:return Trueelse:return Falsedef startNext(self,newtask):self.currentTask = newtaskself.timeRemaining = newtask.getPages() * 60/self.pagerate# 模拟任务
import randomclass Task:def __init__(self,time):self.timestamp = timeself.pages = random.randrange(1,21)def getStamp(self):return self.timestampdef getPages(self):return self.pagesdef waitTime(self, currenttime):return currenttime - self.timestamp#模拟打印机任务队列
from pythonds.basic.queue import Queueimport randomdef simulation(numSeconds, pagesPerMinute):labprinter = Printer(pagesPerMinute)printQueue = Queue()waitingtimes = []for currentSecond in range(numSeconds):if newPrintTask():task = Task(currentSecond)printQueue.enqueue(task)if (not labprinter.busy()) and (not printQueue.isEmpty()):nexttask = printQueue.dequeue()waitingtimes.append(nexttask.waitTime(currentSecond))labprinter.startNext(nexttask)labprinter.tick()averageWait=sum(waitingtimes)/len(waitingtimes)print("Average Wait %6.2f secs %3d tasks remaining."%(averageWait,printQueue.size()))def newPrintTask():num = random.randrange(1,181)if num == 180:return Trueelse:return Falsefor i in range(10):simulation(3600,5)

转载于:https://www.cnblogs.com/Erick-L/p/7209322.html

Python 实现队列相关推荐

  1. python有序队列_Python 队列

    所谓队列 队列是有序集合,添加操作发生在"尾部",移除操作则发生在"头部". 新元素从尾部进入 队列,然后一直向前移动到头部,直到成为下一个被移除的元素. 新添 ...

  2. python 实现队列功能 queue insert() pop()

    def calculate_detection_num(self, calcu_list, detect_num):"""计算一段次数内平均识别个数"" ...

  3. Python 线程队列 LifoQueue – LIFO - Python零基础入门教程

    目录 一.Python 线程队列 Queue 分类 二.Python 线程先进后出队列 LifoQueue 简介 三.Python 线程先进后出队列 LifoQueue 函数介绍 四.Python 线 ...

  4. Python 线程队列 Queue – FIFO - Python零基础入门教程

    目录 一.Python 线程队列分类 二.Python 线程先进先出队列 Queue 简介 三.Python 线程先进先出队列 Queue 常用函数 四.Python 线程先进先出队列 Queue 使 ...

  5. python多进程队列中的队列_python 多进程队列数据处理详解

    我就废话不多说了,直接上代码吧! # -*- coding:utf8 -*- import paho.mqtt.client as mqtt from multiprocessing import P ...

  6. python与队列入门

    队列是有序集合,添加操作发生在"尾部",移除操作则发生在"头部". 新元素从尾部进入队列,然后一直向前移动到头部,直到成为下一个被移除的元素. 最新添加的元素必 ...

  7. python 优先队列_python实现最大优先队列 python优先级队列如何最大值优先

    python优先级队列如何最大值优先 啥???????队列默认就有优先级即使告别爱情的时候,也希望你一切都好;小编不再爱你的时候,也许不是小编不爱你,只是,小编已不能再爱你. python3 优先队列 ...

  8. 100行代码教你爬取斗图网(Python多线程队列)

    100行代码教你爬取斗图网(Python多线程队列) 前言 根据之前写的两篇文章,想必大家对多线程和队列有了一个初步的了解,今天这篇文章就来实战一下,用多线程 + 队列 爬取斗图网的全网图片. 你还在 ...

  9. python实现队列和栈

    python实现队列和栈 1.list 2.collections.deque 3.queue.LifoQueue 1.list 队列:insert列表首部插入,pop() 栈:append列表尾部添 ...

  10. Python 优先级队列

    java PriorityQueue类在Java1.5中引入.PriorityQueue是基于优先堆的一个无界队列,这个优先队列中的元素可以默认自然排序或者通过提供的Comparator(比较器)在队 ...

最新文章

  1. iOS进阶之页面性能优化
  2. 手机连接服务器数据库文件,手机连接服务器数据库文件夹
  3. 深入理解SpringCloud之配置刷新
  4. Android应用开发基础篇(9)-----SharedPreferences
  5. Kotlin实战指南七:单例模式
  6. python为text添加滚动条_Python GUI编程(Tkinter)7、带滚动条的Text
  7. C# 路由(Route)
  8. 【基础】Qt-VS调试器下载与配置
  9. 实体摘要系统的解释性评测
  10. VMware 虚拟机桥接网络设置
  11. JavaWeb:Filter和Listener
  12. 使用Pycharm安装numpy库
  13. 在线计算机带竖式,竖式计算器Scalar v4.2 采用竖式计算
  14. JavaScript表单验证示例
  15. 反汇编工具OD(OllyDebug)
  16. Vue+ elementui 布局混乱
  17. 如果你是CEO,你打算给自己开多少工资?
  18. android手机 一键还原,安卓手机一键恢复通讯录
  19. 游戏建模行业就国内发展的前景,以及行业变化是如何的?
  20. 修改完bug GIT的提交流程 及NVM的常用指令

热门文章

  1. arduino lora通讯_ESP8266 LoRa网关第一步:SPI总线
  2. 无SSH工具部署网站到火腿云
  3. java reduce 分组_使用JAVA8 stream中三个参数的reduce方法对List进行分组统计
  4. android 监听 h5 window,H5嵌入APP后,通过window.WebViewJavascriptBridge原生APP与H5之间交互...
  5. your ps needs to be repaired_同一张人像照片,25 个国家的PS后!!!
  6. Tomcat + hexo 搭建博客
  7. 批处理写的关机小程序--bat
  8. 自动画线指柡(主图)
  9. 三行代码实时追踪你的手,只要有浏览器就够了 | Demo·代码
  10. MIT大牛Gilbert Strang新书:《线性代数与从数据中学习》抢先看