优先队列
既然是优先队列,那么我们首先就需要给数据进行排序,这里最适合的排序方法就是堆排序
。
排完序以后,就可以从队列里面取出想要的值。
// 最大堆、最小堆
// 接口实现比大小
type Item interface {
Less(than Item) bool
}
type Int int
func (x Int) Less(than Item) bool {
return x < than.(Int)
}
// 最小堆
type Heap struct {
// 数据
data []Item
// 是否最小值
min bool
// 锁
lock *sync.Mutex
}
// 初始化堆
func NewHeap() *Heap {
return &Heap{
data: make([]Item, 0),
min: true,
lock: new(sync.Mutex),
}
}
// 初始化最小堆
func NewMin() *Heap {
return &Heap{
data: make([]Item, 0),
min: true,
lock: new(sync.Mutex),
}
}
// 初始化最大堆
func NewMax() *Heap {
return &Heap{
data: make([]Item, 0),
min: false,
lock: new(sync.Mutex),
}
}
// 判断是否为空
func (h *Heap) isEmpty() bool {
return len(h.data) ==