new file: linear/queue.go

This commit is contained in:
Acid
2026-04-21 19:23:22 -04:00
parent 19c8d52228
commit 8138079c23
3 changed files with 73 additions and 6 deletions
+71
View File
@@ -0,0 +1,71 @@
package linear
import (
"errors"
)
// Queue []Type{} -> creates a Queue with no fixed size
// Implemented as slice
type Queue[T any] struct {
capacity uint8
container []T
}
// QueueFixed -> QueueFixed[Type](size) creates a Queue with no fixed size
func QueueFixed[T any](value uint8) *Queue[T] {
return &Queue[T]{
capacity: value,
container: make([]T, 0, value),
}
}
// Add() -> enqeues an item, returns err if queue if full
func (q *Queue[T]) Add(item T) error {
if q.capacity > 0 && q.capacity <= uint8(len(q.container)) {
return errors.New("Queue full")
}
q.container = append(q.container, item)
return nil
}
// Peek() -> returns the upcoming item
func (q *Queue[T]) Peek() (T, bool) {
if len(q.container) <= 0 {
var zero T
return zero, false
}
return q.container[0], true
}
// Pull() -> returns the upcoming item and removes it from Queue
func (q *Queue[T]) Pull() (T, error) {
if len(q.container) <= 0 {
var zero T
return zero, errors.New("Queue is empty")
}
upcoming := q.container[0]
q.container = q.container[1:]
return upcoming, nil
}
// Cull() -> removes the last item , returns it and err
func (q *Queue[T]) Cull() (T, error) {
if len(q.container) <= 0 {
var zero T
return zero, errors.New("Queue is empty")
}
last := q.container[len(q.container)-1]
q.container = q.container[0 : len(q.container)-1]
return last, nil
}
// Size() -> returns size of queue
func (q *Queue[T]) Size() int {
return len(q.container)
}
+1 -4
View File
@@ -1,4 +1,4 @@
package stack package linear
import ( import (
"errors" "errors"
@@ -12,12 +12,10 @@ type Stack[T any] struct {
// StackFixed -> creates Stack with a fixed size // StackFixed -> creates Stack with a fixed size
func StackFixed[T any](value int) *Stack[T] { func StackFixed[T any](value int) *Stack[T] {
return &Stack[T]{ return &Stack[T]{
Capacity: value, Capacity: value,
Container: make([]T, 0, value), Container: make([]T, 0, value),
} }
} }
// Push -> Appends value to stack returns error // Push -> Appends value to stack returns error
@@ -33,7 +31,6 @@ func (s *Stack[T]) Push(value T) error {
// Pop -> returns value,error and removes last index // Pop -> returns value,error and removes last index
func (s *Stack[T]) Pop() (T, error) { func (s *Stack[T]) Pop() (T, error) {
var zero T var zero T
if len(s.Container) <= 0 { if len(s.Container) <= 0 {
+1 -2
View File
@@ -1,4 +1,4 @@
package stack package linear
import ( import (
"testing" "testing"
@@ -13,5 +13,4 @@ func TestPush(t *testing.T) {
if len(s.Container) != 3 { if len(s.Container) != 3 {
t.Errorf("expected 2 items, got %d", len(s.Container)) t.Errorf("expected 2 items, got %d", len(s.Container))
} }
} }