队列的基本操作
from pythonds. basic. queue import Queue
queue = Queue( )
print ( queue. isEmpty( ) )
queue. enqueue( '我是谁' )
queue. enqueue( '2021年' )
queue. enqueue( '新年快乐' )
print ( queue. size( ) )
str = queue. dequeue( )
print ( str )
print ( queue. size( ) )
print ( queue. dequeue( ) )
print ( queue. size( ) )
热土豆问题
from pythonds. basic. queue import Queue
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( ) )
print ( "1" + simqueue. dequeue( ) )
return simqueue. dequeue( )
print ( hotPotato( [ "aa" , "bb" , "cc" , "dd" , "ee" , "ff" , "gg" , "hh" ] , 7 ) )
print ( hotPotato( [ "aa" , "bb" , "cc" , "dd" , "ee" , "ff" , "gg" , "hh" ] , 7 ) )
print ( hotPotato( [ "aa" , "bb" , "cc" , "dd" , "ee" , "ff" , "gg" , "hh" ] , 7 ) )
打印机实例
from pythonds. basic. queue import Queue
import random
class Printer :
def __init__ ( self, ppm) :
self. pagerate = ppm
self. cureentTask = None
self. timeRemaining = 0
def tick ( self) :
if self. cureentTask != None :
self. timeRemaining = self. timeRemaining - 1
if self. timeRemaining <= 0 :
self. cureentTask = None
def busy ( self) :
if self. cureentTask != None :
return True
else :
return False
def startNext ( self, newtask) :
self. cureentTask = 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 newPrintTask ( ) :
num = random. randrange( 1 , 181 )
if num == 180 :
return True
else :
return False
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( ) ) )
for i in range ( 20 ) :
simulation( 3600 , 10 )
双端队列基本操作
from pythonds. basic. deque import Deque
d = Deque( )
print ( d. isEmpty( ) )
d. addRear( "我是谁" )
d. addRear( "2021年" )
d. addRear( "新年快乐" )
d. addFront( "推荐算法" )
d. addFront( "大数据开发" )
d. addFront( "NLP算法开发" )
print ( d. size( ) )
print ( d. removeRear( ) )
双端队列的基本应用—回文词
from pythonds. basic. deque import Deque
def palchecker ( aString) :
chardeque = Deque( )
for ch in aString:
chardeque. addRear( ch)
stillEqual = True
while chardeque. size( ) > 1 and stillEqual:
first = chardeque. removeFront( )
last = chardeque. removeRear( )
if first != last:
stillEqual = False
return stillEqual
print ( palchecker( "123456789987654321" ) )