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 ...