1.牛客网上一道题:

已知一个栈的入栈序列是mnxyz,则不可能出现的出栈顺序是?

A. mnxyz
B. xnyzm
C. nymxz
D. nmyzx

答案是C。

 

可能我脑子比较笨吧,看来看去,感觉没看懂这类题型的意思。

因为我们都知道栈(stack)其实就是跟弹夹一样,子弹是往下压进去的,你如果决定第一发子弹不喜欢(汗)你只能从头把所有子弹取出来才能操作第一发。相信着个大家都懂栈的先进后出概念。但是具体出栈顺序就不懂了,于是我来给大家整理一下我的思路,避免像我一样绕进去了。。。

 

2.解题思路:

/////////////////////////////////////////////////////////////////////////

我们来看一下答案D是具体怎么操作的:

我们先入栈 mn ,  (按照给的顺序),栈现有 = [mn]  

然后出栈 nm,栈现有 = []  , 出栈顺序  = [nm]

然后入栈xy, 出栈 y,栈现有 = [x]  , 出栈顺序 = [mny]

然后入栈z,出栈 z,栈现有 = [x] , 出栈顺序 = [mnyz]

然后出栈 x,栈现有 = [], 出栈顺序 = [mnyzx]

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

然后我们来看一下为啥C是错的:

我们先入栈 mn ,  (按照给的顺序),栈现有 = [mn]

然后出栈 n,栈现有 = [m], 出栈顺序  = [n]

然后入栈xy, 出栈 y,栈现有 = [mx], 出栈顺序 = [ny]

注意,就是这里,栈现有 = [mx],但是我们需要先出m来满足出栈顺序 = [nym],这是不符合先进后出的,所以说C是错的!

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

 

后话:

这道题网上有很多快捷的解题方法,但是我是连基本的操作都没搞懂之前,所以说希望这篇文章有帮到跟我一样的人,Lol

 

 

引用:

https://www.zybang.com/question/2663139844fcef6512d6243287977396.html

https://blog.csdn.net/Zoooozz/article/details/80036919

版权声明:本文为cptCarlvon原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://www.cnblogs.com/cptCarlvon/p/12988062.html