第一种 基于[]int
type Stack []int
// push
func (s *Stack) Push(a int) {
*s = append(*s, a)
}
// pop
func (s *Stack) Pop() int {
a := (*s)[len(*s)-1]
*s = (*s)[:len(*s)-1]
return a
}
// len
func (s *Stack) Len() int {
return len(*s)
}
第二种 定义结构体
type Stack struct {
slc []int
}
func (s *Stack) Push(a int) {
s.slc = append(s.slc, a)
}
func (s *Stack) Pop() int {
a := s.slc[len(s.slc)-1]
s.slc = s.slc[:len(s.slc)-1]
return a
}
func (s *Stack) Len() int {
return len(s.slc)
}
基准测试
// push
for i := 0; i < 50; i++ {
stack.Push(i)
}
// pop
for i := 0; i < 25; i++ {
stack.Pop()
}
// push & pop
for i := 0; i < 25; i++ {
stack.Push(i)
stack.Pop()
}
stack.Len()
性能差距不大。
建议第二种实现。 方便扩展,而且可读性高一点。