判斷棧的出棧順序是否正確

2021-07-24 04:21:29 字數 1056 閱讀 9692

一般這種題都是出現在選擇題裡面的,而且元素較少,所以即使我們使用野路子(依次把選項代入測試)也不會花費多少時間。但是,我們總不能一直打游擊啊,當遇到敵人主力的時候無能為力,那就坑了。

所以這裡介紹怎樣轉游擊戰為陣地戰,從正面硬剛敵人並且取勝的方法。

首先,假設入棧順序是1,2,3,4

正確的出棧順序(其中一種)2,3,4,1

錯誤的出棧順序(其中一種)3,1,4,2

然後,開始準備進攻。我們設定乙個中間棧:tempstack,記錄乙個出棧順序下標index

1、按入棧順序,存入乙個元素到tempstack中

2、比較tempstack的棧頂元素與出棧順序的第index個元素比較

相同,則進行3,否則進行1

3、彈出tempstack的棧頂元素,index++。執行2。

最後,如果迴圈結束後,tempstack為空,則表示出棧順序正確。否則,出棧順序錯誤。

估計乍看一眼,可能難以理解。其實,這就是模擬了一遍出入棧的過程。覺得難以理解的話,可以在紙上按上述流程把所有元素的入棧出棧畫一遍就應該能理解了。我把**貼在下面了,但是由於我用vector比較熟,所以在**中也直接使用vector代替stack了。

#include 

using

namespace

std;

#include

#include

bool judge(vector

& arrin, vector

& arrout)

}return tempstack.empty();

}int main()

; vector

arrout = ;

cout

<< boolalpha << judge(arrin,arrout) << endl;

}

哦,千萬記住,我用的是c++11標準。所以要使用支援c++11標準的編譯器編譯上述**哦。

ps: mingw編譯選項使用-std=c++11居然不能編譯成功,反而要使用-std=gnu++11,受不了!

java判斷出棧順序是否正確

我們知道棧是一種先進後出的資料容器。當乙個棧的輸入序列是遞增序列 例如a,b,c,d 並且在進棧操作時,允許退棧操作,則輸出的序列可能有多種形式 例如 d,c,b,a或a,c,b,d等 但是卻肯定不會出現如下出棧序列 a,d,b,c或d,a,b,c等。在輸入序列為遞增序列的假設下,請編寫乙個演算法判...

劍指offer 判斷出棧順序是否正確

輸入兩個整數序列,第乙個序列表示棧的壓入順序,請判斷第二個序列是否可能為該棧的彈出順序。假設壓入棧的所有數字均不相等。例如序列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就不可能是該壓棧序列的彈出序列。思路 先將入棧序列放入佇列...