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

2021-07-13 08:26:35 字數 1156 閱讀 3113

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

棧是一種「後進先出」(lifo)的資料結構,所以元素的出進順序都是有相對關係的。對應於題目中的例子,當入棧序列為1,2,3,4,5時,經過如下操作便可得到4,5,3,2,1的出棧序列:push(1),push(2),push(3),push(4),pop(4),push(5),pop(5),pop(3),pop(2),pop(1)。而對於4,3,5,1,2的出棧序列,嘗試過程如下:push(1),push(2),push(3),push(4),pop(4),pop(3),push(5),pop(5),此時棧頂元素應該為2,而當前出棧序列中對應的元素為1,所以不可能是該棧的乙個出棧序列。

經過以上分析,總結思想如下:

設定兩個指標pin和pout,分別指向入棧和出棧序列的第乙個元素。若pin!=pout,則將pin指向的元素入棧,pin++,知道兩個元素相等時,將pin指向的元素入棧並出棧,pout++,繼續重複以上過程即可。

**如下:

bool

ispoporder

(const

vector

&ppush

,const

vector

&ppop

)

elseif(

s.top()==

ppop[j

])

}

if(

s.empty

())

else

}

以上

完整**及測試用例在github上:點我前往

來自為知筆記(wiz)

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

題目 輸入兩個整數序列,第乙個序列表示棧的壓入順序,請判斷第二個序列是否為該棧的彈出順序。假設壓入棧的所有數字均不相等。例如序列1,2,3,4,5是某棧的壓入順序,序列4,5,3,2,1是該壓棧序列對應的乙個彈出序列,但4,3,5,1,2就不可能是該壓棧序列的彈出序列。思路 如果下乙個彈出的數字剛好...

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

題目描述 輸入兩個整數序列,第乙個序列表示棧的壓入順序,請判斷第二個序列是否為該棧的彈出序列,假設壓入棧的所有數字不相等。例如序列1,2,3,4,5是某棧的壓棧順序,序列4,5,3,2,1是該棧對應的乙個彈出序列,但是4,3,5,1,2就不可能是該壓棧順序的彈出序列。解決方案 1 public st...

面試題22 棧 棧的壓入和彈出序列

題目描述 輸入兩個整數序列,第乙個序列表示棧的壓入順序,請判斷第二個序列是否為該棧的彈出順序。假設壓入棧的所有數字均不相等。例如序列1,2,3,4,5是某棧的壓入順序,序列4,5,3,2,1是該壓棧序列對應的乙個彈出序列,但4,3,5,1,2就不可能是該壓棧序列的彈出序列。注意 這兩個序列的長度是相...