1.如何设计一个排队系统,能够让每个进入队伍的用户都能看到自己在队列中所处的位置和变化,队伍可能随时有人加入和退出,当有人退出影响到用户的位置排名时需要及时反馈到用户
2.排队系统不仅要实现队列的常见的入队和出队功能,而且还要实现队列的中任意的一个元素都可以随时出队列,且出队列需要更新队列用户位置的变化。
3.代码如下:
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 getSeq(self):
return self.seq
def setSeq(self,seq):
self.seq = seq
def getID(self):
return self.id
def equals(self,args0):
o = args0
return self.id == o.getId()
def toString(self):
return f"id:{self.id} name:{self.name} seq:{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 deQueue(self):
self.q.popleft()
self.updateSeq()
#队列中的人随机离开
def deQueuemove(self,u):
self.q.remove(u)
self.updateSeq()
#出队列后更新队列中每个人的序列
def updateSeq(self):
i = 1
for u in self.q:
u.setSeq(i)
i += 1
#打印队列信息
def printList(self):
for u in self.q:
print(u.toString())
if __name__ == '__main__':
u1 = User(1,'user1')
u2 = User(2,'user2')
u3 = User(3,'user3')
u4 = User(4,'user4')
u5 = User(5,'user5')
queue = MyQueue()
queue.enQueue(u1)
queue.enQueue(u2)
queue.enQueue(u3)
queue.enQueue(u4)
queue.enQueue(u5)
queue.printList()
print("**************************************")
queue.deQueue()
queue.deQueuemove(u3)
queue.printList()
结果:
id:1 name:user1 seq:1
id:2 name:user2 seq:2
id:3 name:user3 seq:3
id:4 name:user4 seq:4
id:5 name:user5 seq:5
**************************************
id:2 name:user2 seq:1
id:4 name:user4 seq:2
id:5 name:user5 seq:3
Process finished with exit code 0