生活随笔
收集整理的這篇文章主要介紹了
数据结构实验之栈与队列七:出栈序列判定
小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
Description
給一個(gè)初始的入棧序列,其次序即為元素的入棧次序,棧頂元素可以隨時(shí)出棧,每個(gè)元素只能入棧依次。輸入一個(gè)入棧序列,后面依次輸入多個(gè)序列,請(qǐng)判斷這些序列是否為所給入棧序列合法的出棧序列。
例如序列1,2,3,4,5是某棧的壓入順序,序列4,5,3,2,1是該壓棧序列對(duì)應(yīng)的一個(gè)出棧序列,但4,3,5,1,2就不可能是該序列的出棧序列。假設(shè)壓入棧的所有數(shù)字均不相等。
Input
第一行輸入整數(shù)n(1<=n<=10000),表示序列的長(zhǎng)度。
第二行輸入n個(gè)整數(shù),表示棧的壓入順序。
第三行輸入整數(shù)t(1<=t<=10)。
后面依次輸入t行,每行n個(gè)整數(shù),表示要判斷的每一個(gè)出棧序列。
Output
對(duì)應(yīng)每個(gè)測(cè)試案例輸出一行,如果由初始入棧序列可以得到該出棧序列,則輸出yes,否則輸出no。
Sample
Input
5
1 2 3 4 5
2
4 5 3 2 1
4 3 5 1 2
Output
yes
no
思路:
首先建立一個(gè)棧,將輸入的數(shù)據(jù)保存在數(shù)組中,一個(gè)一個(gè)的進(jìn)棧,然后每一個(gè)進(jìn)棧的時(shí)候都與目標(biāo)序列元素相比較,當(dāng)二者相等的時(shí)候,出棧,然后繼續(xù)獲取棧頂元素余下一個(gè)序列元素相比較,相等就接著比較下一個(gè),如果不相等就繼續(xù)入棧操作,當(dāng)入棧操作結(jié)束后。判斷
#include<bits/stdc++.h>using namespace std
;#define intsize 10010
#define addsize 10010typedef int elemtype
;typedef struct
{elemtype
*base
;elemtype
*top
;int stacksize
;
} Sqstack
;int initstack(Sqstack
&s
)
{s
.base
= (elemtype
*)malloc(intsize
*sizeof(elemtype
));if(!s
.base
)return -1;s
.top
= s
.base
;s
.stacksize
= intsize
;return 0;
}
int push(Sqstack
&s
, elemtype x
)
{if(s
.top
- s
.base
> s
.stacksize
){s
.base
= new elemtype
[intsize
+ addsize
];if(!s
.base
)return -1;s
.top
= s
.base
+ addsize
;}*s
.top
++ = x
;return 0;
}elemtype
top(Sqstack
&s
)
{return *(s
.top
- 1);
}elemtype
pop(Sqstack
&s
)
{return *--s
.top
;
}int emptystack(Sqstack
&s
)
{if(s
.base
== s
.top
)return 1;elsereturn 0;
}
int main()
{Sqstack s
;int n
, i
, t
, k
;int b
[10010], a
[10010];memset(a
, 0, sizeof(a
));scanf("%d", &n
);for(i
= 0; i
< n
; i
++){scanf("%d", &a
[i
]);}scanf("%d", &t
);while(t
--){k
= 0;initstack(s
);memset(b
, 0, sizeof(b
));for(i
= 0; i
< n
; i
++)scanf("%d", &b
[i
]);for(i
= 0; i
< n
; i
++){push(s
, a
[i
]);while(top(s
) == b
[k
] && emptystack(s
) != 1){pop(s
);k
++;}}if(emptystack(s
) == 1)printf("yes\n");elseprintf("no\n");}return 0;
}
總結(jié)
以上是生活随笔為你收集整理的数据结构实验之栈与队列七:出栈序列判定的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。