题目描述
请设计一个排序系统,能够让每个进入队伍的用户都能看到自己在队伍中所处的位置和变化,队伍可能随时友人加入和退出;当有人退出影响到用户的位置排名是需要及时反馈到用户。
分析
- 实现队列常见的入队和出队功能
- 实现队列中任意一个元素都可以随时出队列
- 出队列后需要更新队列用户位置的变化
代码
from collections import deque
class User:
def __init__(self, id, name) -> None:
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, arg0):
o = arg0
return self.id == o.getID()
def toString(self):
return 'id:' + str(self.id) + ' name:' + self._name + ' seq:' + str(self.seq)
class MyQueue:
def __init__(self) -> None:
self.queue = deque()
def enQueue(self, u):
# 进入队列
u.setSeq(len(self.queue) + 1)
self.queue.append(u)
def deQueue(self):
# 出队
self.queue.popleft()
self.updateSeq()
def deQueuemove(self, u):
# 队列中的人随机离开
self.queue.remove(u)
self.updateSeq()
def updateSeq(self):
# 出队列后更新队列中每个人的序列
i = 1
for u in self.queue:
u.setSeq(i)
i += 1
def printList(self):
for u in self.queue:
print(u.toString())
if __name__ == "__main__":
user1 = User(1, 'user1')
user2 = User(2, 'user2')
user3 = User(3, 'user3')
user4 = User(4, 'user4')
queue = MyQueue()
queue.enQueue(user1)
queue.enQueue(user2)
queue.enQueue(user3)
queue.enQueue(user4)
queue.deQueue()
queue.deQueuemove(user3)
queue.printList()