思路:检查全排列是否为正确的出栈顺序,是则输出。include
1.A:a,b,c,d,e进2113,之后依5261次出栈;2.B:a,b,c,d,进,d出,e进,e,c,b,a出;3.D:a进a出,b进b出……e进e出;4.C:的话dce都好办,之后的ab做不到;这道题就是没所以我们要从中找到规律。首先我们看一下A选项,第一个出栈的是D,那么就说明ABC按顺序的排在栈中,那么ABC的出栈顺序一定是CBA这样的,中间有可能夹杂着EF,比如
这个方法讨论最后一个出栈的元素是第几个进栈的元素。我们记Last_i =\{ (a_{m_1}, a_{m_2}, a_{m_{n-1}},a_i)\} 表示最后一个出栈的元素是a_i 的所有出2、在原序列中相对位置比它大的,顺序没有要求;3、以上两点可以间插进行。我们再看选项D的出栈顺序FECDBA,明显出栈元素F后面的元素C和D不满足上面规律1,所以
然后入栈xy, 出栈y,栈现有= [mx], 出栈顺序= [ny] 注意,就是这里,栈现有= [mx],但是我们需要先出m来满足出栈顺序= [nym],这是不符合先进后出的,所以说C是3.将abcde 入栈,不可能的出栈顺序A.abcde B.decba C.decab D.edcba 4.Struct S { int * p; int * p2; }; void main() { struct S mys; int *p=&mys.p; p[0]
二、在原序列中相对位置比它大的,顺序没有要求;三、以上两点能够间插进行。阿里巴巴咱们再看选项D的出栈顺序FECDBA,明显出栈元素F后面的元素C和D不知足上面:1 2 3 4 5 判断出栈顺序:4 3 5 1 2 结果:不合理,缘由是出栈元素3以后有5 1 2 这三个元素,其中1 2 是比3先入栈的,根据规律,这两个出栈的顺序必须和入栈顺序