棧之根本——後進先出(last in first out,lifo)
要解決這類問題:最本質就是出棧的時候,可以邊入棧邊出棧。
考慮:設棧的輸入序列是1,2,3則出棧的序列有?
1,2,3 1入棧出棧,2入棧出棧,3入棧出棧
1,3,2 1入棧出棧,2入棧,3入棧出棧,2出棧
2,1,3 1入棧,2入棧出棧,1出棧,3入棧出棧
2,3,1 1入棧,2入棧出棧,3入棧出棧,1出棧
3,2,1 1入棧,2入棧,3入棧出棧,2出棧,1出棧
輸入序列有n個資料元素,則出棧的可能序列有:
例如:某個棧的入棧序列是a,b,c,d,e,則可能的出棧序列是:
a、adbec
b、ebcad
c、bcdea
d、eabcd
對於選項a: a入棧出棧,之後bc入棧,d入棧出棧,選項顯示b即將出棧,但是這時棧裡還有bc而且c才是棧頂元素。所以a選項不可能。
對於選項b:如果e是第乙個出棧的元素,則abcd一定在e之前就入了棧,所以如果e是第乙個出棧的元素,則出棧順序一定是edcba
對於選項c: a入棧,b入棧出棧,c入棧出棧,d入棧出棧,e入棧出棧,最後a出棧。所以選項c正確。
對於選項d:同選項b。
棧(出棧序列)
已知自然數1,2,n 1 n 10000 依次入棧 即a1 c2,cn 是否為可能的出棧序列。例如 n 5時,3,4,2,1,5是乙個可能的出棧序列,因為其可以按如下操作獲得 push 1,push 2,push 3,pop,push 4,pop,pop,pop,push 5,pop input 輸...
可能的出棧序列問題
首先的前提是進棧一定是要按照順序進棧如1 2 3 4的順序,如果第乙個出的是4,那麼要依次先進棧1 2 3 4,然後出棧,這樣的話第乙個是4,沒有其他的元素可以再進棧了,所以只能按順序出棧,這樣出棧的順序就是4 3 2 1。假如出棧的順序是3 4 2 1,你就要先分析出3的情況,只有先將1 2 3入...
棧 出棧序列判定
給乙個初始的入棧序列,其次序即為元素的入棧次序,棧頂元素可以隨時出棧,每個元素只能入棧依次。輸入乙個入棧序列,後面依次輸入多個序列,請判斷這些序列是否為所給入棧序列合法的出棧序列。例如序列1,2,3,4,5是某棧的壓入順序,序列4,5,3,2,1是該壓棧序列對應的乙個出棧序列,但4,3,5,1,2就...