棧的壓入 彈出序列

2021-09-27 01:48:15 字數 1019 閱讀 6574

題目描述

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

自己的思路

自以為對棧很了解,其實仔細深入才發現自己不會,到了**層面就不會弄了,就比如這道題,如果是一道選擇題的話可以很容易做出來,但是程式設計判斷就不會了,(這也是科班生和非科班生的區別啊,如果只會做選擇題,還要你個計算機碩士幹嘛)。算了,雖然沒思路,也要把大佬的思路搞明白,畢竟現在是校招衝刺的階段,實力不行就只能靠勤奮加上多學習別人的經驗了。

大佬的思路

解決該問題需要借助乙個輔助棧,把輸入的第乙個序列中的數字依次入棧,並按照第二個序列的順序依次從該棧中彈出數字。

判斷乙個序列是不是棧的彈出序列規律:

a.如果下乙個彈出的數字剛好是棧頂數字,那麼直接彈出。

b.如果下乙個彈出的數字不在棧頂,則把壓棧序列中還沒有入棧的數字壓入棧,直到把下乙個需要彈出的數字壓入棧頂為止。如果所有數字都壓入棧後沒有找到下乙個彈出的數字,那麼該序列不可能是乙個彈出序列。(最後就是通過判斷這個棧經過出棧後是否為空來判斷的)

上**

class solution 

if(s.

top(

)!= popv[popidx]

)break

; s.

pop();

++popidx;

//出棧時,popidx++}if

(s.empty()

&& popidx == len)

//是否是序列的判斷條件

ispoporder = true;

return ispoporder;}}

;

棧的壓入彈出序列

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

棧的壓入 彈出序列

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

棧的壓入彈出序列

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