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

2021-08-01 15:52:43 字數 1372 閱讀 6855

think:

一開始wa了2發, 原因是把 stack 放在的 cin >> t 前面, 不能起到 中間棧的作用, 後來放到資料中間就ac了~~~

思路:判斷 a[i] == b[j] 是否成立, 如果成立的話就更新, 否則的話 就進行判斷,

如果 棧頂元素與b[j] 相同的話就出棧 同時更新b[j];

如果 棧頂元素與b[j]不同時, 就將a[i]壓入棧中;

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。

example input

5 1 2 3 4 5

2 4 5 3 2 1

4 3 5 1 2

example output

yes

no

#include

using

namespace

std;

int main()

else

if (!s.empty() && s.top() == b[j])

else

if (i < n)

else

break;

}if (s.empty())

cout

<< "yes"

<< endl;

else

cout

<< "no"

<< endl;

}}

樣例:

1 2 3 4 5

當 要求4 5 3 2 1順序出棧時 入棧順序為 1 2 3 4 然後出棧 4 然後入棧 5;

當 要求4 3 5 1 2順序出棧時 , 因為 1 先入棧 所以 1 必定在 2後出棧(後入先出的原則) 所以時不存在的

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

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

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

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

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

這道題的演算法思想就是 讓初始的的入棧序列的第乙個入棧,然後比較棧頂元素與輸入的出棧序列比較,若不相等則讓初始得入棧序列繼續入棧,直至找到與其相等的入棧序列元素,然後將棧頂元素出棧,輸入的出棧序列向後移動乙個,再進行比較。如下 include include define maxsize 10020...