队列算法题---如何设计一个排序系统

设计一个排队序列,能够让每个进入队伍的用户看到自己在队列中所处的位置和变化,队伍中随时有人加入和退出;当有人退出影响到用户排名时,需要及时的反馈。
解析:既然是排队序列,那么加入只能排在队尾。所以,他不会影响到原先所有人的排序。但是,有人退出时需要注意,队头的人和队中间的人退出才会影响用户排名,队尾的人走了,不会影响到前面所有的人。
因此,我们需要构造两个类,一个用来描述客户,当前的排序,和其本身属性。另一个类用来描述排队的这个事件,如有人加入,有人离开以及实时更新当前用户排序状态。

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)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值