Files
leetcode/data-structure/ds-stack.go
T
2026-07-20 19:57:25 +08:00

42 lines
963 B
Go

package ds
// ds-stack.go
// 泛型切片栈。Push/Pop/Peek 均 O(1)。
// Pop 前先读值再缩切片,并把被弹出位置置零,避免底层数组持有引用导致内存泄漏。
// Stack 泛型栈,零值可用。
type Stack[T any] struct {
data []T
}
// Push 入栈。
func (s *Stack[T]) Push(v T) { s.data = append(s.data, v) }
// Pop 出栈;空栈返回零值和 false。
func (s *Stack[T]) Pop() (T, bool) {
var zero T
if len(s.data) == 0 {
return zero, false
}
n := len(s.data) - 1
v := s.data[n]
s.data[n] = zero // 置零,释放引用
s.data = s.data[:n]
return v, true
}
// Peek 查看栈顶,不移除;空栈返回零值和 false。
func (s *Stack[T]) Peek() (T, bool) {
var zero T
if len(s.data) == 0 {
return zero, false
}
return s.data[len(s.data)-1], true
}
// Len 栈元素个数。
func (s *Stack[T]) Len() int { return len(s.data) }
// Empty 是否为空。
func (s *Stack[T]) Empty() bool { return len(s.data) == 0 }