diff options
Diffstat (limited to 'container/stack.go')
| -rw-r--r-- | container/stack.go | 28 |
1 files changed, 28 insertions, 0 deletions
diff --git a/container/stack.go b/container/stack.go new file mode 100644 index 0000000..0f5a640 --- /dev/null +++ b/container/stack.go @@ -0,0 +1,28 @@ +// Package container содержит стандартные контейнеры для данных. +package container + +// Stack container. +type Stack[T any] []T + +// Push element to stack. +func (s *Stack[T]) Push(e T) { + *s = append(*s, e) +} + +// Pop element from stack. +func (s *Stack[T]) Pop() T { + var e T + if len(*s) > 0 { + e, *s = (*s)[len(*s)-1], (*s)[:len(*s)-1] + } + return e +} + +// Top element on stack. +func (s *Stack[T]) Top() T { + var e T + if len(*s) > 0 { + e = (*s)[len(*s)-1] + } + return e +} |
