python優先順序佇列

2021-09-13 11:50:29 字數 2718 閱讀 3210

class

priorityqueue

: data =

dict()

def __init__

(self)

: pass

'''入隊:如果物件沒有優先等級,則新增到隊尾,如果對空,則預設等級為1

如果物件有優先等級,如果有同等級的則新增到對應等級末尾

'''def push

(self,obj,key=none):if

(key==none):if

(self.data.

keys()

):maxkey =

max(self.data.

keys()

) self.data[maxkey]

.(obj)

else

: self.

push

(obj,1)

return

else:if

(key not in self.data.

keys()

):self.data[key]=[

] self.data[key]

.(obj)

print

("key: "

, key,

" obj :"

, obj)

''' 按優先順序出隊,並從隊內移除

'''def pop

(self):if

(self.data)

: minkey =

min(self.data.

keys()

) # print

("minkey :"

, minkey)

obj = self.data[minkey]

.pop(0

) # print

("obj :"

,obj)if(

len(self.data[minkey]

)<1)

: #self.items.

popitem

(minkey)

del self.data[minkey]

return obj

else

:print

("empty queue"

)return

def isempty

(self)

:return self.data

def size

(self)

: count=

0for item in self.data:

count+=

len(self.data[item]

)return count

def __str__

(self)

: tmp=

"priorityqueue:\n"

for key,value in self.data.

items()

: tmp+=

"level :\t"

+str

(key)

+"\t object :\t"

+str

(value)

+"\n"

return tmp

p=

priorityqueue()

p.push

("level: none")p.

push

("level:4",4

)p.push

("level:1-0",1

)p.push

("level:1-1",1

)p.push

("level:0",0

)

key: 1 obj : level: none

key: 4 obj : level:4

key: 1 obj : level:1-0

key: 1 obj : level:1-1

key: 0 obj : level:0

print

(p)print

("size:\t"

,p.size()

)

priorityqueue:

level : 1 object : [『level: none』, 『level:1-0』, 『level:1-1』]

level : 4 object : [『level:4』]

level : 0 object : [『level:0』]

size: 5

print

(p.pop()

)print

(p.pop()

)print

(p.pop()

)print

(p.pop()

)print

(p.pop()

)print

("size:\t"

,p.size()

)

level:0

level: none

level:1-0

level:1-1

level:4

size: 0

python優先順序佇列 python 優先順序佇列

簡介 優先順序佇列是基於堆的,關於堆的時候可以參考文章堆,優先順序佇列就是入隊時,會分配乙個優先順序,之後出隊時,根據優先順序出列。如,入隊時 4,a 6,r 3 d 則出隊順序 6,r 4,a 3 d 優先順序佇列的python實現 class priorityqueue object def i...

優先順序佇列 python

在之前寫最短路徑,和哈夫曼編碼的時候都用到了優先順序佇列優化,用的是c 中的包,priority queue。那在python中會以什麼形式存在呢。class array object def init self,maxsize none self.elem none maxsize self.le...

佇列 優先順序佇列

優先順序佇列的隊尾是不需要改變的,永遠在低下標處。當佇列增加資料時,隊頭的位置就是資料項的大小減去1.public class priorityq 插入 public void insert long item else quearray j 1 item nitem 刪除 public long ...