题目描述

请设计一个排序系统,能够让每个进入队伍的用户都能看到自己在队伍中所处的位置和变化,队伍可能随时友人加入和退出;当有人退出影响到用户的位置排名是需要及时反馈到用户。

分析

  • 实现队列常见的入队和出队功能
  • 实现队列中任意一个元素都可以随时出队列
  • 出队列后需要更新队列用户位置的变化

代码

  1. from collections import deque
  2. class User:
  3. def __init__(self, id, name) -> None:
  4. self.id = id # 唯一标识一个用户
  5. self._name = name
  6. self.seq = 0
  7. def getName(self):
  8. return self._name
  9. def setName(self, name):
  10. self._name = name
  11. def getSeq(self):
  12. return self.seq
  13. def setSeq(self, seq):
  14. self.seq = seq
  15. def getID(self):
  16. return self.id
  17. def equals(self, arg0):
  18. o = arg0
  19. return self.id == o.getID()
  20. def toString(self):
  21. return 'id:' + str(self.id) + ' name:' + self._name + ' seq:' + str(self.seq)
  22. class MyQueue:
  23. def __init__(self) -> None:
  24. self.queue = deque()
  25. def enQueue(self, u):
  26. # 进入队列
  27. u.setSeq(len(self.queue) + 1)
  28. self.queue.append(u)
  29. def deQueue(self):
  30. # 出队
  31. self.queue.popleft()
  32. self.updateSeq()
  33. def deQueuemove(self, u):
  34. # 队列中的人随机离开
  35. self.queue.remove(u)
  36. self.updateSeq()
  37. def updateSeq(self):
  38. # 出队列后更新队列中每个人的序列
  39. i = 1
  40. for u in self.queue:
  41. u.setSeq(i)
  42. i += 1
  43. def printList(self):
  44. for u in self.queue:
  45. print(u.toString())
  46. if __name__ == "__main__":
  47. user1 = User(1, 'user1')
  48. user2 = User(2, 'user2')
  49. user3 = User(3, 'user3')
  50. user4 = User(4, 'user4')
  51. queue = MyQueue()
  52. queue.enQueue(user1)
  53. queue.enQueue(user2)
  54. queue.enQueue(user3)
  55. queue.enQueue(user4)
  56. queue.deQueue()
  57. queue.deQueuemove(user3)
  58. queue.printList()