algorithms/fundamentals/stack/stack.go

51 lines
729 B
Go
Raw Normal View History

2021-11-08 20:32:55 +02:00
package stack
// "Generic" item.
// When type parameters will land this type became
// type Item[T any] T
type Item interface{}
type Stack interface {
Push(Item)
Pop() Item
Size() int
IsEmpty() bool
}
// We use linked list as internal data structure
// to get O(1) speed for push and pop opeartions
type node struct {
item Item
next *node
}
type stack struct {
size int
head *node
}
func NewStack() Stack {
return &stack{}
}
func (s *stack) Push(item Item) {
next := s.head
s.head = &node{item, next}
s.size++
}
func (s *stack) Pop() Item {
head := s.head
s.head = head.next
s.size--
return head.item
}
func (s *stack) Size() int {
return s.size
}
func (s *stack) IsEmpty() bool {
return s.size == 0
}