第十题为什么是3不是2

img

画个图或者列个表就明白了,只要知道栈和队列的特性即可,分析如下

img

感觉这个题目应该是4。
栈讲究“先进后出”,队列讲究“先进先出”。
(1)先来说为什么不是2
假设S大小是2:那么只有三种情况:
一是:a入栈后,a立即出栈,b再入栈,b再出栈,c入栈,c再出栈。。。。依次类推,这种情况下,队列中的就是abcdefg,不满足题目要求
二是:a入栈后,b入栈,栈满,b出栈,b入队列,c入栈,此时队列中的元素是bc,按队列的照先进先出,仍然不满足题目要求
三是:a入栈后,b入栈,栈满,b出栈,b入队列,a出栈,a入队列,队列元素是ba,也不符合题目要求。
所以当栈S大小是2的时候,是无法满足题目要求的输出的。
(2)为什么不是3
队列的出队顺序就是栈的出栈顺序,也就是出栈顺序是bdfgeca。
eca在最后才出栈,也就是意味着,栈中最少要有3个空间来保存这三个数,所以,栈的空间最少是3。
但是,题目还一个要求,abcdefg依次入栈,也就意味着,在栈中已经有ace这3个元素的时候,仍然需要一个栈空间,以便让后面的元素能够入栈,否则,就必须先出栈一个元素,然后再入栈。所以,在这个题目中,栈的最小空间应该是4