Skip to content

Commit

Permalink
Implemented a simple stack for utility
Browse files Browse the repository at this point in the history
  • Loading branch information
iamsayantan committed Apr 17, 2022
1 parent 7381ff5 commit 5f31a86
Showing 1 changed file with 46 additions and 0 deletions.
46 changes: 46 additions & 0 deletions util/stack.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,46 @@
package util

import "errors"

var (
ErrStackEmpty = errors.New("stack is empty")
)

type Stack[T any] struct {
data []T
}

func NewStack[T any]() *Stack[T] {
return &Stack[T]{data: make([]T, 0)}
}

func (s *Stack[T]) Push(data T) {
s.data = append(s.data, data)
}

func (s *Stack[T]) Pop() (T, error) {
var data T
if s.IsEmpty() {
return data, ErrStackEmpty
}

data = s.data[len(s.data)-1]
s.data = s.data[:len(s.data)-1]

return data, nil
}

func (s *Stack[T]) IsEmpty() bool {
return len(s.data) == 0
}

func (s *Stack[T]) Peek() (T, error) {
var data T

if s.IsEmpty() {
return data, ErrStackEmpty
}

data = s.data[len(s.data)-1]
return data, nil
}

0 comments on commit 5f31a86

Please sign in to comment.