设计一个排队序列,能够让每个进入队伍的用户看到自己在队列中所处的位置和变化,队伍中随时有人加入和退出;当有人退出影响到用户排名时,需要及时的反馈。
解析:既然是排队序列,那么加入只能排在队尾。所以,他不会影响到原先所有人的排序。但是,有人退出时需要注意,队头的人和队中间的人退出才会影响用户排名,队尾的人走了,不会影响到前面所有的人。
因此,我们需要构造两个类,一个用来描述客户,当前的排序,和其本身属性。另一个类用来描述排队的这个事件,如有人加入,有人离开以及实时更新当前用户排序状态。
from collections import deque
class User():
def __init__(self,id,name):
self.id=id
self.name=name
self.seq=0
def getname(self):
return self.name
def setname(self,name):
self.name=name
def getid(self):
return self.id
def getseq(self):
return self.seq
def setseq(self,seq):
self.seq=seq
def tostring(self):
return "id"+str(self.id)+"name"+self.name+"seq"+str(self.seq)
class Myqueue():
def __init__(self):
self.q=deque()
def enqueue(self,u):
u.setseq(len(self.q)+1)
self.q.append(u)
def updateseq(self):
i=1
for u in self.q:
u.setseq(i)
i+=1
def dequeue(self):#在队头离开一个人
self.q.leftpop()
self.updateseq()
def movedeque(self,u):#在队列中间离开了一个用户
self.q.remove(u)
self.updateseq()
def printdeque(self)
for u in self.q:
print(u.tostring())
if __name__=="__main__":
u1=User(1,"user1")
u2=User(2,"user2")
q=Myqueue()
q.enqueue(u1)