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].append(obj)
else:
self.push(obj, 1)
return
else:
if (key not in self.data.keys()):
self.data[key] = []
self.data[key].append(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=0
for 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