对于"先入后出"和"后入先出"引发的思考
2026年9月25日大约 2 分钟
今天看数据结构,说到算法里面栈(stack)说到先入后出,我懵了一下,然后回味一下我记得的是后进先出,这么一想也没错.
可是自己觉得还是后进先出更符合栈的特性.也更容易理解记忆.
先入后出 和 后进先出(LIFO)字面是同一个逻辑,只是描述视角反过来了。C 函数调用栈的时候,用「后进先出」更贴合程序运行的真实过程。
栈的定义标准术语就是 Last In First Out,LIFO,后进先出。
- 后进先出:最后压进去的东西,最先拿出来,刚好对应函数调用:
调用 A → 调用 B → 调用 C。C 是最后入栈的,函数执行完最先返回销毁,回到 B;B 结束再回到 A。这就是 C 函数栈帧的工作方式,非常贴合。 - 先入后出:是换个角度描述,先进去的 A,最后才出栈。语义没错,但属于被动视角。
很多教程随口写 “先入后出”,只是口语化描述,逻辑没有错,但是讲 C 的函数栈帧、内存栈的时候,优先用后进先出,更符合 CPU 压栈、出栈的动作顺序。
函数每一次调用,就往栈上压入一个栈帧(局部变量、返回地址),这就是 “进栈”;函数 return 的时候,直接销毁当前最新的栈帧,也就是后进的最先弹出。
这个视角就是 LIFO,后进先出。
栈:标准特性后进先出 (LIFO)。很多教程写 “先入后出” 逻辑等价,但描述 C 函数调用栈,用后进先出更贴合底层执行动作。
