“栈和队列”的版本间的差异
跳到导航
跳到搜索
Jihongchang(讨论 | 贡献) |
Jihongchang(讨论 | 贡献) |
||
第30行: | 第30行: | ||
例:元素按照a、b、c的次序进入栈,请尝试写出其所有可能的出栈序列。 | 例:元素按照a、b、c的次序进入栈,请尝试写出其所有可能的出栈序列。 | ||
− | [[文件:出栈序列.png|无|缩略图|900x900像素]]这个问题适合倒推考虑,先列出所有可能的排列组合,然后按照目标的排列组合, | + | [[文件:出栈序列.png|无|缩略图|900x900像素]] |
+ | {| class="wikitable" | ||
+ | ! colspan="5" |a<sub>in</sub> | ||
+ | |- | ||
+ | ! colspan="2" |a<sub>out</sub> | ||
+ | ! colspan="3" |b<sub>in</sub> | ||
+ | |- | ||
+ | ! colspan="2" |b<sub>in</sub> | ||
+ | ! colspan="2" |b<sub>out</sub> | ||
+ | !c<sub>in</sub> | ||
+ | |- | ||
+ | !b<sub>out</sub> | ||
+ | !c<sub>in</sub> | ||
+ | !a<sub>out</sub> | ||
+ | !c<sub>in</sub> | ||
+ | !c<sub>out</sub> | ||
+ | |- | ||
+ | !c<sub>in</sub> | ||
+ | !c<sub>out</sub> | ||
+ | !c<sub>in</sub> | ||
+ | !c<sub>out</sub> | ||
+ | !b<sub>out</sub> | ||
+ | |- | ||
+ | !c<sub>out</sub> | ||
+ | !b<sub>out</sub> | ||
+ | !c<sub>out</sub> | ||
+ | !a<sub>out</sub> | ||
+ | !a<sub>out</sub> | ||
+ | |} | ||
+ | |||
+ | |||
+ | 这个问题适合倒推考虑,先列出所有可能的排列组合,然后按照目标的排列组合, | ||
按照目标排列组合的顺序我们就知道哪个是后进栈的, | 按照目标排列组合的顺序我们就知道哪个是后进栈的, |
2022年9月18日 (日) 09:16的版本
https://www.bilibili.com/video/BV1hg411V7Bm?p=58
队列(Queue)
先进先出(FIFO——first in first out)
队尾(rear)进行插入操作
队头(front)进行删除操作
栈(Stack)
先进先出(FILO——first in last out)
栈顶(top):进行插入和删除操作的一端称为栈顶
栈底(bottom):固定不变,不可进行插入和删除操作
进栈/压栈:Push the Stack
出栈/退栈/弹栈:Pop the Stack
例:元素按照a、b、c的次序进入栈,请尝试写出其所有可能的出栈序列。
ain | ||||
---|---|---|---|---|
aout | bin | |||
bin | bout | cin | ||
bout | cin | aout | cin | cout |
cin | cout | cin | cout | bout |
cout | bout | cout | aout | aout |
这个问题适合倒推考虑,先列出所有可能的排列组合,然后按照目标的排列组合,
按照目标排列组合的顺序我们就知道哪个是后进栈的,
(因为后进先出,然后根据“元素按照a、b、c的次序入栈”,那么1个字母如果入栈了,那么它前面的字母也一定入过栈了,虽然可能已经出栈了也可能没出栈,看后面)
注意:
当有多个函数构成嵌套调用时(如:递归调用),按照“后调用先返回”的原则,函数之间的信息传递和控制转移可以用“栈”来实现。