ZBLOG

golang 栈解析

在 Go 中,栈(Stack)是一种常见的数据结构,它是一种后进先出(LIFO)的线性表。栈中元素的插入和删除操作分别在栈顶进行。

使用数组实现栈:

type Stack struct {
    data []int
}

func (s *Stack) Push(val int) {
    s.data = append(s.data, val)
}

func (s *Stack) Pop() int {
    if len(s.data) == 0 {
        return -1 // 栈为空
    }
    val := s.data[len(s.data)-1]
    s.data = s.data[:len(s.data)-1]
    return val
}

使用链表实现栈:

type Node struct {
    Val  int
    Next *Node
}

type Stack struct {
    top *Node // 栈顶指针,即最新加入的节点指针
}

func (s *Stack) Push(val int) {
    newNode := &Node{Val: val, Next: s.top} // 新建一个节点,并将其Next指向原来的栈顶节点
    
    s.top = newNode // 将新节点设置为栈顶节点 
}

func (s *Stack) Pop() int {
     if s.top == nil { // 栈为空,返回-1 
         return -1 
     }

     val := s.top.Val 
     s.top = s.top.Next // 将栈顶指针向下移动一位 
     
     return val 
}

注意:在链表实现中,每次插入元素时都需要新建一个节点并更新top指针;而删除元素时,只需要将top指针向下移动一位即可。

总之,栈是 Go 中非常重要和常用的数据结构之一,掌握其基本操作对于编写高效、可读性强且易维护的代码至关重要。

本站部分文章来源于网络,版权归原作者所有,如有侵权请联系站长删除。
转载请注明出处:https://golang.0voice.com/?id=6471

分享:
扫描分享到社交APP
上一篇
下一篇
发表列表
游客 游客
此处应有掌声~
评论列表

还没有评论,快来说点什么吧~

联系我们

在线咨询: 点击这里给我发消息

微信号:3007537140

上班时间: 10:30-22:30

关注我们
x

注册

已经有帐号?