summaryrefslogtreecommitdiff
path: root/queue/elementarypriority.go
diff options
context:
space:
mode:
Diffstat (limited to 'queue/elementarypriority.go')
-rw-r--r--queue/elementarypriority.go60
1 files changed, 60 insertions, 0 deletions
diff --git a/queue/elementarypriority.go b/queue/elementarypriority.go
new file mode 100644
index 0000000..508cbcb
--- /dev/null
+++ b/queue/elementarypriority.go
@@ -0,0 +1,60 @@
+package queue
+
+import "algorithms/ds"
+
+type ElementaryPriority struct {
+ a ds.ArrayList
+ size int
+ // Initial capacity
+ capacity int
+}
+
+func NewElementaryPriority(capacity int) *ElementaryPriority {
+ return &ElementaryPriority{make(ds.ArrayList, 0, capacity), 0, capacity}
+}
+
+func (q *ElementaryPriority) Insert(a int) {
+ q.a = append(q.a, a)
+ q.size++
+}
+
+func (q *ElementaryPriority) Max() (max int) {
+ _, max = q.max()
+ return
+}
+
+func (q *ElementaryPriority) DeleteMax() int {
+ 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.size--
+
+ return max
+}
+
+func (q *ElementaryPriority) Empty() bool {
+ return q.Size() == 0
+}
+
+func (q *ElementaryPriority) Size() int {
+ return q.size
+}
+
+func (q *ElementaryPriority) Clear() {
+ q.size = 0
+ q.a = make(ds.ArrayList, 0, q.capacity)
+}
+
+func (q *ElementaryPriority) max() (ind, max int) {
+ for i, a := range q.a {
+ if a > max {
+ ind, max = i, a
+ }
+ }
+ return ind, max
+}