package main
import (
"container/heap"
"fmt"
)
type Item struct{
value string
priority int
idx int//item在heap中的索引
}
type queue []*Item
func (q queue) Len() int{
return len(q)
}
func (q queue) Swap(i, j int){
q[i],q[j] = q[j],q[i]
q[i].idx = i
q[j].idx = j
}
func (q queue) Less(i,j int)bool{
return q[i].priority < q[j].priority
}
func (q *queue) Push(item interface{}){
index := len(*q)
(item.(*Item)).idx = index
*q = append(*q, item.(*Item))
}
func (q *queue) Pop()interface{}{
n := len(*q)-1
item := (*q)[n]
*q = (*q)[0:n]
return item
}
type PriorityQueue struct {
priorityQueue queue
}
func NewPriorityQueue()*PriorityQueue{
return &PriorityQueue{priorityQueue:make([]*Item,0)}
}
func (pq *PriorityQueue) Push(item *Item){
heap.Push(&pq.priorityQueue, item)
}
func (pq *PriorityQueue) Pop()(item *Item){
return heap.Pop(&pq.priorityQueue).(*Item)
}
优先级队列
最新推荐文章于 2022-12-24 16:57:29 发布