• 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)
  • 相关阅读:
    poj 1037 三维dp
    poj 3311 floyd+dfs或状态压缩dp 两种方法
    HDU 5761 物理题
    HDU 5752
    Codeforces Round #328 (Div. 2) C 数学
    cakephp中sql查询大于
    cakephp获取最后一条sql语句
    iconv()错误
    sql时间戳转日期格式
    接口报错
  • 原文地址:https://www.cnblogs.com/lely/p/10136984.html
Copyright © 2020-2023  润新知