佇列演算法題 如何設計乙個排序系統

2021-10-09 03:22:23 字數 1722 閱讀 4362

設計乙個排隊序列,能夠讓每個進入隊伍的使用者看到自己在佇列中所處的位置和變化,隊伍中隨時有人加入和退出;當有人退出影響到使用者排名時,需要及時的反饋。

解析:既然是排隊序列,那麼加入只能排在隊尾。所以,他不會影響到原先所有人的排序。但是,有人退出時需要注意,隊頭的人和隊中間的人退出才會影響使用者排名,隊尾的人走了,不會影響到前面所有的人。

因此,我們需要構造兩個類,乙個用來描述客戶,當前的排序,和其本身屬性。另乙個類用來描述排隊的這個事件,如有人加入,有人離開以及實時更新當前使用者排序狀態。

from collections import deque

class

user()

:def

__init__

(self,

id,name)

: self.id=

id self.name=name

self.seq=

0def

getname

(self)

:return self.name

defsetname

(self,name)

: self.name=name

defgetid

(self)

:return self.

iddef

getseq

(self)

:return self.seq

defsetseq

(self,seq)

: self.seq=seq

deftostring

(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

)def

updateseq

(self)

: i=

1for u in self.q:

u.setseq(i)

i+=1def

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)

如何設計乙個排序系統

請設計乙個排序系統,能夠讓每個進入隊伍的使用者都能看到自己在列隊中所處的位置和變化,隊伍可能隨時有人加入和退出,當有人退出影響到使用者的位置排名時需要及時反饋到使用者。from collections import deque class user def init self,id,name sel...

如何設計乙個訊息佇列

其實聊到這個問題,一般面試官要考察兩塊 你有沒有對某乙個訊息佇列做過較為深入的原理的了解,或者從整體了解把握住乙個訊息佇列的架構原理。看看你的設計能力,給你乙個常見的系統,就是訊息佇列系統,看看你能不能從全域性把握一下整體架構設計,給出一些關鍵點出來。說實話,問類似問題的時候,大部分人基本都會蒙,因...

如何設計乙個秒殺系統

秒殺場景一般會在電商 舉行一些活動或者節假日在12306 上搶票時遇到。對於電商 中一些稀缺或者 商品,電商 一般會在約定時間點對其進行限量銷售,因為這些商品的特殊性,會吸引大量使用者前來搶購,並且會在約定的時間點同時在秒殺頁面進行搶購。限流 鑑於只有少部分使用者能夠秒殺成功,所以要限制大部分流量,...