stack.go
代码语言:javascript复制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]=%vn", i, tmp.arr[i])
}
return
}
main.gp
代码语言:javascript复制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再进栈。