在 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 中非常重要和常用的数据结构之一,掌握其基本操作对于编写高效、可读性强且易维护的代码至关重要。




