Skip to content

栈 ​

基础与数据结构

说明 ​

后进先出地保存元素;Go 切片可在尾部 O(1) 摊还入栈。

分析 ​

Push 把值附加到切片末尾,Pop 读取并删除最后一个值,保持后进先出。解析括号、深度优先搜索和撤销记录都可用栈。

栈顶始终位于有效切片末端,因此弹出7不移动4。空栈没有合法末端,应在访问前检查;若槽保存对象引用,缩短长度与清理旧槽对垃圾回收的影响也应区分。

查看图表代码

适用前提与边界 ​

示例假设弹出时非空;正式 API 应返回成功标记或错误,避免空栈越界。 空栈Pop会越界;尾部追加均摊O(1),发生扩容的一次Push可能搬移全部元素。

示例输入与调用 ​

go
stack := new(Stack)
	stack.Push(4)
	stack.Push(7)
	fmt.Println(stack.Pop())

运行输出 ​

text
7

完整 Go 示例 ​

go
package main

import "fmt"

type Stack []int

func (s *Stack) Push(x int) {
	*s = append(*s, x)
}
func (s *Stack) Pop() int {
	n := len(*s) - 1
	x := (*s)[n]
	*s = (*s)[:n]
	return x
}

func main() {
	stack := new(Stack)
	stack.Push(4)
	stack.Push(7)
	fmt.Println(stack.Pop())
}

继续阅读