你有没有在食堂见过洗好的盘子一个一个往上叠的场景?最上面的那个总是最先被拿走,而最下面的那个得等到所有上面的盘子都被取完才能动。这种“后进先出”的逻辑,在计算机里有个名字——栈。
什么是栈?
栈是一种特殊的线性数据结构,只允许在一端进行操作,这一端叫“栈顶”,另一端叫“栈底”。就像你往箱子里放书,只能从上面放和取,下面的书不拿出来,就碰不到更早放进去的。
栈的几个基本操作
最常见的操作有三个:入栈、出栈、查看栈顶。
入栈(Push):把一个元素放到栈顶。比如你今天买了本书,顺手放在桌上已有的几本上面,这本书就成了当前最“新”的那一本。
出栈(Pop):把栈顶的元素拿走。就像你急着找最底下那本旧账本,就得一本本把上面的搬开,每拿走一本就是一次出栈。
查看栈顶(Peek 或 Top):不拿走元素,只是看看现在最上面是谁。好比你瞥一眼最上面那本书的封面,确认是不是你要的,但并不真动手去翻。
用代码简单演示一下
假如我们用 Python 来模拟一个栈,其实可以用列表来实现:
# 创建一个空栈
stack = []
# 入栈:append 相当于 push
stack.append("第一本书")
stack.append("第二本书")
stack.append("第三本书")
# 查看栈顶
print("当前最上面:", stack[-1]) # 输出:第三本书
# 出栈:pop 移除并返回最后一个元素
top_item = stack.pop()
print("拿走了:", top_item) # 输出:第三本书
# 再看栈顶
print("现在最上面:", stack[-1]) # 输出:第二本书
这段代码就像你在整理书桌,每次加书都放最上,拿书也只从最上面取。
生活中哪些地方用了栈的思想?
浏览器的“返回”按钮就是个典型例子。你从首页点到商品页,再跳到详情页,每一步都被压进一个“页面栈”。点返回时,系统就把你刚才经过的页面一个个从栈顶弹出来,顺序刚好倒过来。
还有撤销操作(Ctrl+Z)。你写文档时删了一段字,按一次撤销就恢复最近一次操作,再按又恢复上一次——这背后也是栈在记着你每一步动作。
栈不大,但挺管用。它不复杂,却支撑着很多日常功能的运行。理解它的基本操作,就像明白为什么盘子要那样叠——不是随便堆的,是有讲究的。”}