package main
import (
"errors"
"fmt"
)
//使用数组模拟一个栈
type Stack struct {
MaxTop int //表示栈最大的存放个数
Top int //表示栈顶
arr [5]int //数组模拟栈
}
func (this *Stack) Push(val int) (err error) {
//先判断栈是否满了
if this.Top == this.MaxTop-1 {
fmt.Println("stack full")
return errors.New("stack full")
}
this.Top++
//放入数据
this.arr[this.Top] = val
return
}
//出栈
func (this *Stack) Pop() (val int, err error) {
//判断栈是否为空
if this.Top == -1 {
fmt.Println("stack empty!")
return 0, errors.New("stack empty")
}
//先取值 ,再对 this.Top--
val = this.arr[this.Top]
this.Top--
return val, nil
}
//遍历栈,需要从栈顶开始遍历
func (this *Stack) List() {
//先判断栈是否为空
if this.Top == -1 {
fmt.Println("stack empty")
return
}
fmt.Println("栈的情况:")
//curTop := this.Top
for i := this.Top; i >= 0; i-- {
fmt.Printf("arr[%d]=%d\n", i, this.arr[i])
}
}
func main() {
stack := &Stack{
MaxTop: 5, //
Top: -1, //栈顶为-1表示栈空
}
//入栈
for i := 1; i < 6; i++ {
err := stack.Push(i)
if err != nil {
return
}
}
//显示
stack.List()
//出栈
fmt.Println("出栈情况如下")
//单出栈
//val, _ := stack.Pop()
//fmt.Println("出栈的为:", val)
//stack.List()
//全出栈
for stack.Top >= 0 {
val, _ := stack.Pop()
fmt.Println("出栈的为:", val)
stack.List()
fmt.Println()
}
}
go:栈的出入
最新推荐文章于 2024-10-14 08:29:12 发布