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
