栈
基础与数据结构
说明
后进先出地保存元素;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())
}继续阅读
- 系统学习
- 系统学习
- 系统学习