資料結構經典問題——出棧順序
宣告一下我寫部落格的初衷:不是炫耀,而是回報。因為我在計算機方面的知識好多都從網上找到答案,因此我也
將自己搜尋整理的材料,自己寫的材料,展示到網上,算是盡一份力吧。
一個經典問題如下(不願意看思路的可以直接看紅色字型部分):
一個棧的入棧序列是a,b,c,d,e則棧的不可能的輸出序列是:()
A edcbd B decba C dceab D abcde
棧之根本——先進後出(first in,lastout)初次接觸到這個問題的人,或許會認為入棧abcde,所以出棧只能是edcba所以BCD都不對。
其實是這個問題描述有歧義,應該是分段入棧的順序,也就是說,可能先入棧a,取出a,入棧b,取出b……,所以D也是可能的。
知道這個意思了以後,就要明確這個問題的矛盾根本所在:第一次出棧d,說明什麼?說明a,b,c一定早已入棧(入棧順序決定的)。那麼在出棧d以後,a,b,c的出棧順序一定是c,b,a,而不用理會中間穿插著出棧了d後面的字元(因為可以再入棧,再出棧嘛)。所以立即選中C,不用猶豫,理由簡單:d出棧了,abc一定已經入棧,那麼abc只能以cba的順序出棧,C不符合,OK!This problem is so esay, Thanks for my teacher Wang Shanshan.
棧就像個筒子 只能從最外面一個一個的出來
ABCD一次進棧從棧口到裡面是DCBA
如果是多選的話 那就是沒有一次性放完··
A :A> B> B< C> C< A< D> D< BCAD
B:A> B> C> C< D> D< B< A< CDBA
C: A> A< B> B< C> C< D> D< ABCD
>表示進 <表示出
以此類推···
1。EDCBA 2。DECBA 3。DCEAB 4。ABCDE
選3
堆疊講究先進後出,後進先出
選項1是abcde先入棧,然後依次出棧,正好是edcba
選項2是abcd先依次入棧,然後d出棧,e再入棧,e出棧
選項3是錯誤的,不可能a先出棧
選項4是a入棧,然後a出棧;b再入棧,b出棧。。。。。。依此類推