package main
import (
"errors"
"fmt"
)
//栈
type stack struct {
MaxTop int //表示栈最大可以存放的个数
Top int //表示栈顶,因为栈顶固定,因此我们直接使用top
arr [5]int //数组模拟栈
}
// Push 入栈
func (s *stack)Push(val int) (err error) {
if s.MaxTop-1 == s.Top {
fmt.Println("栈满了")
return errors.New("栈满了")
}
s.Top ++
//放入数据
s.arr[s.Top] = val
return
}
// Pop 出栈
func (s *stack) Pop() (val int,err error) {
//空判断
if s.Top == -1 {
fmt.Println("栈是空的")
return 0,errors.New("栈是空的")
}
//先取值,在 s.Top--
val = s.arr[s.Top]
s.Top--
return val,nil
}
// List 遍历
func (s *stack) List() {
//判断是否为空
if s.Top == -1 {
return
}
for i := s.Top; i >= 0; i-- {
fmt.Printf("arr[%d]=%d\n",i,s.arr[i])
}
}
func main() {
stack := &stack{
MaxTop: 5,
Top: -1,
}
stack.Push(4)
stack.Push(40)
stack.Push(400)
stack.List()
var v int
v,_ = stack.Pop()
fmt.Println("弹出",v)
v,_ = stack.Pop()
fmt.Println("弹出",v)
v,_ = stack.Pop()
fmt.Println("弹出",v)
v,_ = stack.Pop()
fmt.Println("弹出",v)
stack.List()
}