golang数据结构之栈

时间:2022-07-23
本文章向大家介绍golang数据结构之栈,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。

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]=%vn", 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再进栈。