資料結構實驗之棧與佇列七 出棧序列判定

2021-08-18 20:09:23 字數 1312 閱讀 2395

資料結構實驗之棧與佇列七:出棧序列判定

problem description

給乙個初始的入棧序列,其次序即為元素的入棧次序,棧頂元素可以隨時出棧,每個元素只能入棧依次。輸入乙個入棧序列,後面依次輸入多個序列,請判斷這些序列是否為所給入棧序列合法的出棧序列。

例如序列1,2,3,4,5是某棧的壓入順序,序列4,5,3,2,1是該壓棧序列對應的乙個出棧序列,但4,3,5,1,2就不可能是該序列的出棧序列。假設壓入棧的所有數字均不相等。

input

第一行輸入整數n(1<=n<=10000),表示序列的長度。

第二行輸入n個整數,表示棧的壓入順序。

第三行輸入整數t(1<=t<=10)。

後面依次輸入t行,每行n個整數,表示要判斷的每乙個出棧序列。

output

對應每個測試案例輸出一行,如果由初始入棧序列可以得到該出棧序列,則輸出yes,否則輸出no

sample input

51 2 3 4 5

24 5 3 2 1

4 3 5 1 2

sample output

yesno

hint

思路:根據出棧順序模擬一遍出棧。

設定乙個stack棧來模擬出棧,將入棧元素按順序存入佇列in中,將出棧元素按順序存入佇列out中。

從佇列out中取元素e,判斷stack是不是空。

a.stack為空,從佇列in中取元素入stack棧。

b.stack非空,判斷e和棧頂元素是否相等。如果相等,棧頂元素出棧;否則,繼續從in中取元素入棧。

當in隊列為空,迴圈結束,判斷棧是否為空。如果棧為空,出棧順序合法;否則,不合法。

#include

using

namespace std;

intmain()

int t;

cin >> t;

while

(t--

)int stack[

10000];

int*top = stack;

int j =0;

bool flag =

true

;for

(int i =

0; i < n; i++

)else}}

if(*(top-1)

== temp)

else}if

(!flag)

else

cout <<

"yes"

<< endl;

}return0;

}

資料結構實驗之棧與佇列七 出棧序列判定

problem description 給乙個初始的入棧序列,其次序即為元素的入棧次序,棧頂元素可以隨時出棧,每個元素只能入棧依次。輸入乙個入棧序列,後面依次輸入多個序列,請判斷這些序列是否為所給入棧序列合法的出棧序列。例如序列1,2,3,4,5是某棧的壓入順序,序列4,5,3,2,1是該壓棧序列對...

資料結構實驗之棧與佇列七 出棧序列判定

time limit 30ms memory limit 1000kb submit statistic problem description 給乙個初始的入棧序列,其次序即為元素的入棧次序,棧頂元素可以隨時出棧,每個元素只能入棧依次。輸入乙個入棧序列,後面依次輸入多個序列,請判斷這些序列是否為所...

資料結構實驗之棧與佇列七 出棧序列判定

time limit 30 ms memory limit 1000 kib submit statistic discuss problem description 給乙個初始的入棧序列,其次序即為元素的入棧次序,棧頂元素可以隨時出棧,每個元素只能入棧依次。輸入乙個入棧序列,後面依次輸入多個序列,...