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

2021-07-15 23:23:45 字數 1198 閱讀 5621

time limit: 30ms memory limit: 1000k

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

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

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

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

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

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

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

5
1 2 3 4 5
2
4 5 3 2 1
4 3 5 1 2

yes
no

#include #include #define stackmax 10000

#define stacknum 10000

typedef int elemtype;

typedef struct

sqstack;

int initstack(sqstack &s)

int push(sqstack &s , int e)

*s.top++=e;

}int pop(sqstack &s)

int gettop(sqstack &s)

int stackempty(sqstack &s)

/*基本思想:

若b陣列中的元素大於棧頂元素則a陣列中元素入棧

直到b陣列中的元素等於棧頂元素 棧頂元素出棧

繼續遍歷b陣列

*/int judge(sqstack &s, int a, int b, int n)

if(stackempty(s)) printf("yes\n");

else printf("no\n");

}int main()

{ int n, m, t, i, a[10010], b[10010];

scanf("%d", &n);

for(i=0; i

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

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

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

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

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

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