zoukankan      html  css  js  c++  java
  • python-数据结构代码 队列

    from pythonds.basic.queue import Queue
    import random
    def 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()
        
    class Queue:
        def __init__(self):
            self.items = []
    
        def isEmpty(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)
    
    class Printer:
        def __init__(self,ppm):
            self.pagerate=ppm
            self.currentTask = None
            self.timeRemaining=0
        def tick(self):
            if self.currentTask!= None:
                self.timeRemaining=self.timeRemaining-1
                if self.timeRemaining <=0:
                    self.currentTask=None
        def busy(self):
            if self.currentTask!=None:
                return True
            else:
                return False
        def startNext(self,newtask):
            self.currentTask=newtask
            self.timeRemaining=newtask.getPages()*60/self.pagerate
    
    class Task:
        def __init__(self,time):
            self.timestamp=time
            self.pages=random.randrange(1,21)
        def getStamp(self):
            return self.timestamp
        def getPages(self):
            return self.pages
        def waitTime(self,currenttime):
            return currenttime-self.timestamp
    
    def 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 True
        else:
            return False
    for i in range(10):
        simulation(3600,5)
  • 相关阅读:
    在qt中用tcp传输xml消息
    Response.Redirect 打开新窗体的两种方法
    div:给div加滚动栏 div的滚动栏设置
    高速排序算法
    海量数据处理面试题集锦
    VB中DateDiff 函数解释
    FusionCharts简单教程(一)---建立第一个FusionCharts图形
    mysql 加入列,改动列,删除列。
    Lucene教程具体解释
    Windows7下的免费虚拟机(微软官方虚拟机)
  • 原文地址:https://www.cnblogs.com/lely/p/10136984.html
Copyright © 2011-2022 走看看