python优先级队列

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

猜你喜欢

转载自blog.csdn.net/qq_39464369/article/details/88761496