stack.go
package stack import ( "errors" "fmt" ) type Stack struct { MaxTop int //栈最大可以存放的数量 Top int //栈顶 arr [5]int //模拟栈 } func (s *Stack) Push(val int) (err error) { //先判断栈是否满了 if s.Top == s.MaxTop-1 { fmt.Println("栈满了") return errors.New("栈满了") } s.Top++ s.arr[s.Top] = val return } func (s *Stack) Pop() (val int, err error) { if s.Top == -1 { fmt.Println("栈已空") return -1, errors.New("栈已空") } val = s.arr[s.Top] s.arr[s.Top] = 0 s.Top-- return val, nil } func (s *Stack) Show() { if s.Top == -1 { fmt.Println("栈为空") return } tmp := s for i := tmp.Top; i >= 0; i-- { fmt.Printf("arr[%d]=%v ", i, tmp.arr[i]) } return }
main.gp
package main import ( "fmt" "go_code/data_structure/stack" ) func main() { s := &stack.Stack{ MaxTop: 5, Top: -1, // 当栈顶为-1时,表示栈顶为空 } s.Push(1) s.Push(2) s.Push(3) s.Push(4) s.Push(5) for i := 0; i < 3; i++ { val, err := s.Pop() if err != nil { fmt.Println("出栈错误err=", err) return } fmt.Println("出栈的值是:", val) } s.Push(6) s.Show()
}
运行结果:
首先是1,2,3,4,5依次进栈,然后5,4,3出栈,6再进栈。