劍指offer 面試題22 棧的壓入,彈出序列

2022-07-26 14:33:08 字數 1646 閱讀 1870

題目:輸入兩個整數序列,第乙個序列表示棧的壓入順序,請判斷第

二個序列是否為該棧的彈出順序。假設壓入棧的所有數字均不相等。

例如序列1、2、3、4、5是某棧的壓棧序列,序列4、5、3、2、1

是該壓棧序列對應的乙個彈出序列,但4、3、5、1、2就不可能是該

該壓棧序列的彈出序列。

這種判斷其實只要掌握棧的先進後出原則,則不難解決。

本題的題解步驟如下:

1.設定乙個輔助棧s,用於模擬出棧入棧順序,設入棧順序序列為ppush,出棧順序序列為ppop

2.設定兩個索引或指標分別指向入棧序列和出棧序列的第乙個元素

3.順序索引入棧元素,當入棧元素不等於出棧元素的時候,將入棧元素依次壓入輔助棧s

4.當兩者相等的時候,壓入該元素到輔助棧s中同時將棧頂元素出棧,出棧入棧序列的索引均向後移動乙個位置

5.當入棧序列索引結束之後,ppush剩餘的元素全部已壓入棧s

6.依次索引ppop如果ppop與輔助棧頂元素比較如果相等這將輔助棧頂彈出

7.當棧中所有的元素均彈出的時候則說明出棧順序序列與正好是入棧順序序列對應的出棧順序。否則出棧順序與入棧順序不匹配。

**實現如下:

1 #include 2 #include 3

using

namespace

std;45

bool ispoporder(const

int* ppush,const

int* ppop,int

nlength)618

else

192526}

2728

while(p2

2935

else

3639}40

41return

true;42

}4344int

main()45;

47int ppop[5

];48

int len=5;49

50 cout<

please input the sequence of out stack:\n";

51for(int i=0;i)

5258

59if

(ispoporder(ppush,ppop,len))

6063

else

6467

68return0;

69 }

執行截圖:

劍指offer 面試題22 棧的壓入 彈出序列

題目 輸入兩個整數序列,第乙個序列表示棧的壓入順序,請判斷第二個序列是否為該棧的彈出順序。假設入棧的所有數字均不相等。思路 用乙個棧來模擬入棧過程。如果彈出序列的元素a不等於棧頂,那麼說明它還沒有入棧,從壓入順序裡將元素a以及它之前的元素全部入棧。如果所有壓入順序中的元素都已入棧還是沒有在棧頂找到元...

劍指Offer 面試題22 棧的壓入 彈出序列

題面 劍指offer p134 牛客網 輸入兩個整數序列,第乙個序列表示棧的壓入順序,請判斷第二個序列是否為該棧的彈出順序。假設壓入棧的所有數字均不相等。例如序列1,2,3,4,5是某棧的壓入順序,序列4,5,3,2,1是該壓棧序列對應的乙個彈出序列,但4,3,5,1,2就不可能是該壓棧序列的彈出序...

劍指offer面試題22 棧的壓入 彈出序列

題目 輸入兩個整數序列,第乙個序列表示棧的壓入順序,請判斷第二個序列是否為該棧的彈出順序。思路 遍歷第二個序列,如果下乙個彈出的數字剛好是棧頂數字,則直接彈出。如果不在棧頂,把壓棧序列中還沒有入棧的陣列壓入輔助棧,直到把下乙個需要彈出的數字壓入棧頂為止。如果所有的數字都壓入棧了仍然沒有找到下乙個彈出...