-
Notifications
You must be signed in to change notification settings - Fork 56
Expand file tree
/
Copy pathstack.go
More file actions
51 lines (42 loc) · 736 Bytes
/
stack.go
File metadata and controls
51 lines (42 loc) · 736 Bytes
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
package array
import (
"DSGO/utils"
)
type Stack[T any] struct {
vec []T
}
func NewStack[T any](size int) utils.Stack[T] {
s := new(Stack[T])
s.vec = make([]T, 0, size)
return s
}
func (s *Stack[T]) Size() int {
return len(s.vec)
}
func (s *Stack[T]) IsEmpty() bool {
return len(s.vec) == 0
}
func (s *Stack[T]) Clear() {
clear(s.vec)
s.vec = s.vec[:0]
}
func (s *Stack[T]) Push(elem T) {
s.vec = append(s.vec, elem)
}
func (s *Stack[T]) Pop() T {
if len(s.vec) == 0 {
panic("empty stack")
}
last := len(s.vec) - 1
elem := s.vec[last]
var zero T
s.vec[last] = zero
s.vec = s.vec[:last]
return elem
}
func (s *Stack[T]) Top() T {
if len(s.vec) == 0 {
panic("empty stack")
}
return s.vec[len(s.vec)-1]
}