//
GTMC
DATABASE
MY DRAFTS
REVIEW HUB
FEATURES
LOGIN
< BACK
NEW_SUBMISSION
TITLE_
FILE_PATH (e.g. Folder/My-Article.md)_
CONTENT (MARKDOWN)_
B
I
LINK
IMG
H3
</>
SUPPORT_PASTE/DROP_IMG
# 1 栈的概念 本章将介绍栈与调用栈的概念,这将帮助读者更好地理解方块更新。 ## 1.1 理解栈 > **栈(Stack)** 是一种 **先进后出(FILO, First In Last Out)** 的数据结构,它的特点是:元素只能在表的一端被操作。 ### 1.1.1 先进后出 想象一个 **薯片桶**: - 薯片只能从桶口放入,也只能从桶口拿出。 - 因此,**最先放入桶底的那片薯片,将会是最后才能拿出来的**。 这就是“先进后出”的概念。 ### 1.1.2 栈 栈即是一个薯片桶。 而在数据结构的术语里: - “往桶里放薯片”对应 **压入栈(Push)**; - “从桶口取薯片”对应 **弹出栈(Pop)**。 此外: - **桶口** 就相当于 **栈顶(Top)** - **桶底** 则相当于 **栈底(Bottom)** 这便是栈的概念。 ## 1.2 调用栈的概念 > **调用栈(Call Stack)** 是程序在运行时管理函数调用的一种机制,它依赖栈的“先进后出”规则来保证函数能够正确返回。 ## 1.2.1 调用栈 想象你打电话问问题: 1. 你打电话给朋友 A,询问一个问题。 2. A 不知道答案,于是他打电话询问他的朋友 B。 3. B 也不清楚,再去询问问朋友 C。 这次,C 找到了答案,他先告诉 B; B 再将答案告诉 A; 最后 A 将答案告诉你。 这里的顺序就是 **调用栈的行为**: - 每一次电话都向“调用栈”中压入一个新的“调用任务”。 - C 寻找答案时,**栈顶的任务**就是“C寻找答案”。 - C 找到答案后,**最后被调用的任务最先完成**,然后逐层返回给调用者(B → A → 你)。 - 而你最初的电话,是最先压入调用栈的任务,因此它位于**栈底**。 而在程序中: - “打电话” 相当于 **调用函数**; - “得到答案并回传” 相当于 **函数返回结果**。 这样,程序便可以在函数嵌套调用时,确保每个函数都能完成并正确返回到调用点。
SAVE DRAFT
SUBMIT FOR REVIEW