1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
|
package queue
import (
"codeberg.org/snonux/algorithms/ds"
)
type ElementaryPriority[T ds.Number] struct {
a ds.ArrayList[T]
// Initial capacity
capacity int
}
func NewElementaryPriority[T ds.Number](capacity int) *ElementaryPriority[T] {
return &ElementaryPriority[T]{make(ds.ArrayList[T], 0, capacity), capacity}
}
func (q *ElementaryPriority[T]) Insert(a T) {
q.a = append(q.a, a)
}
func (q *ElementaryPriority[T]) Max() (max T) {
_, max = q.max()
return
}
func (q *ElementaryPriority[T]) DeleteMax() T {
if q.Empty() {
return 0
}
ind, max := q.max()
for i := ind + 1; i < q.Size(); i++ {
q.a[i-1] = q.a[i]
}
q.a = q.a[0 : len(q.a)-1]
return max
}
func (q *ElementaryPriority[T]) Empty() bool {
return q.Size() == 0
}
func (q *ElementaryPriority[T]) Size() int {
return len(q.a)
}
func (q *ElementaryPriority[T]) Clear() {
q.a = make(ds.ArrayList[T], 0, q.capacity)
}
func (q *ElementaryPriority[T]) max() (ind int, max T) {
for i, a := range q.a {
if a > max {
ind, max = i, a
}
}
return ind, max
}
|