棧輸入輸出規律總結
我們都知道棧是先進後出的,最近總遇見這樣的題型,原則是“先進後出”,但做題總漏掉
現以四個為例:設鏈棧的輸入序列為A B C D,試寫出所得到的所有可能的輸出序列。
解:從A先出棧開始考慮所有情況,然後在A出的接觸上接著考慮B出的情況,直到最後;然後考慮B先出的情況,在B先出的基礎上剩餘的按小到大的順序考慮。
(一)A先出
(1)A先出基礎上B出有:ABCD、ABDC
(2)A先出基礎上C出有:ACBD、ACDB、ADCB
(3)A先出基礎上D出有:ADCB
同理有B先出:BACD、BADC、BCAD、BCDA、BDCA
有C先出:CBAD、CBDA、CDBA
有D先出:DCBA
檢查正誤的規律:先出來的序號後面一定不能有比他本身小的從小到大排列的序列。
例:在此題中ADBC不是解 ,如圖:
同樣的:
BDAC不是解,因為AC都小於D,且AC是從小到大排列;
CABD不是解,因為AB都小於C,且AB是從小到大排列;
CADB不是解,因為AB都小於C,且AB是從小到大排列,(儘管他們中間隔著D;)
CDAB不是解,因為AB都小於C,且AB是從小到大排列;
DABC不是解,因為ABC都小於D,且ABC從小到大排列;
DACB不是解,因為ACB都小於D,且AB從小到大排列;
DBAC不是解,因為BAC都小於D,且AC從小到大排列;
DBCA不是解,因為BCA都小於D,且BC從小到大排列;
DCAB不是解,因為CAB都小於D,且AB從小到大排列。