stl-go/stack/stack.go
2022-04-01 21:53:04 +08:00

50 lines
837 B
Go

/*
* @Author: NorthCity1984
* @LastEditTime: 2022-04-01 21:35:59
* @Description:
* @Website: https://grimoire.cn
* Copyright (c) NorthCity1984 All rights reserved.
*/
package stack
type Number interface {
int | int64 | float32 | float64
}
type Stack[T Number] struct {
size T
top *stackItem[T]
}
type stackItem[T Number] struct {
Val T
Next *stackItem[T]
}
func Init[T Number]() Stack[T] {
return Stack[T]{size: 0, top: nil}
}
func (s *Stack[T]) IsEmpty() bool { return s.size == 0 }
func (s *Stack[T]) Push(val T) bool {
newNode := stackItem[T]{Val: val, Next: s.top}
s.size++
s.top = &newNode
return true
}
func (s *Stack[T]) GetTop() T {
return s.top.Val
}
func (s *Stack[T]) Pop() (T, bool) {
if s.IsEmpty() {
return 0, false
}
retVal := s.top.Val
s.size--
s.top = s.top.Next
return retVal, true
}