You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

67 lines
1.3 KiB
Go

package datastructures
import "errors"
// Stack a Last in First out data structure.
type Stack struct {
elements []any
}
// Push add an element to the top of the stack
//
// Parameters:
//
// any: an element to add to the top of the stack.
func (s *Stack) Push(el any) {
s.elements = append(s.elements, el)
}
// Pop removes and returns the top element of the stack.
//
// Returns:
//
// any: The top element of the stack
//
// error: If the stack is found to be empty
func (s *Stack) Pop() (any, error) {
if s.IsEmpty() {
return nil, errors.New("empty stack")
}
el := s.elements[len(s.elements)-1]
s.elements = s.elements[:len(s.elements)-1]
return el, nil
}
// Peek checks the top item in the stack.
//
// Returns:
//
// any: a copy of the top element
//
// error: An error if the stack is empty
func (s *Stack) Peek() (any, error) {
if s.IsEmpty() {
return nil, errors.New("empty stack")
}
return s.elements[len(s.elements)-1], nil
}
// IsEmpty checks if the stack contains any elements.
//
// Returns:
//
// bool: True is the stack is empty. False if the stack contains elements.
func (s *Stack) IsEmpty() bool {
return s.Size() == 0
}
// Size checks this size of the stack
//
// Returns:
//
// int: The number of elements on the stack
func (s *Stack) Size() int {
return len(s.elements)
}