在笔试堆栈知识点中通常会考一道典型的出入栈题型,格式为:
已知按照0,1,2...9的顺序入栈,则下面哪个不能为出栈顺序?下面来进行分析。
入栈顺序:0,1,2,3,4,5,6,7,8,9
出栈情况分析:假如数字5出栈,则代表数字0,1,2,3,4肯定已经入栈,因为5只有入栈了才能出栈。
此时0,1,2,3,4是否已经出栈了呢?我们不清楚,可能其中部分已经出栈。下面来例举几种情况。
case1:0,1,2,3,4都没有出栈,则0-4的出栈顺序为43210
case2:数字3已经出栈,则数字5后面的0,1,2,4这四个数字的出栈顺序为4210
case3:数字2,4已经在5前面出栈,则在5的后面0,1,3的出栈顺序为310
case4:数字134已经在5前面出栈,则5后面0,2的出栈顺序为20.
case .....
综上分析:假如数字5已经出栈,我们无法确定0,1,2,3,4是否已在5的前面出栈,但是能肯定的是01234这几个数字中还没有在5前面出栈的某些数字,它们的出栈顺序肯定是从大到小。它们可以不完全,但顺序肯定不能变,否则就改变了栈的出入栈的规则。为此5后面的数字可以是43210,4210,4210,4310,4320,4321,410,420,432,421,430,等等太多了。
总之,只要记住5后面比它小的数字肯定安装降序从大到小排列就行了。
笔试做题直接用排除法,如果某个大数后面比它小的不是降序排列,就是错误的出栈顺序。
原文链接:https://blog.csdn.net/nqwzl/article/details/99867941