数据结构笔记---栈的“不可能出现的出栈顺序”思路总结
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