submit
statistic
discuss
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
用乙個中間棧,最後若此棧為空,證明序列是所給入棧序列合法的出棧序列。
例如
入棧序列是1 2 3 4 5
出棧序列是4 3 5 1 2
①把1 2 3 4壓入棧s(此時4是棧頂),待測出棧序列元素為4
②把棧頂4彈出,變成1 2 3(此時3是棧頂),待測出棧序列元素為3
③把棧頂3彈出,變成1 2 ,然後5入棧變成1 2 5(此時5是棧頂),待測出棧序列元素為5
④把棧頂5彈出,變成1 2(此時2是棧頂),此時待測出棧序列元素為1,已不滿足各個if條件,退出for迴圈
⑤s棧不為空,輸出no
#include using namespace std;
int a[10010], b[10010];//入棧序列,待測出棧序列
int main()
cin >> k;
while(k --)
stacks;//中間棧
int i = 0, j = 0;
while(j < n)
else if(!s.empty() && s.top() == b[j])//取棧頂元素和當前元素想比,若相等,將棧頂元素出棧
else if(i < n)
else
break;
} if(s.empty())//若中間棧為空,則此序列合法
else//否則不合法
} return 0;
}
資料結構實驗之棧七 出棧序列判定
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...