1. 程式人生 > >數據結構 | 棧:1051

數據結構 | 棧:1051

bsp tdi empty 遇到 讓其 我們 ac代碼 style pac

這是一個棧的模擬題,同時“通過出棧序列判斷是否合理”這樣的考法在考研中經常遇到,也很有可能被命致為考研算法題,這類題的解題方法值得深究。

1、既然是模擬入棧出棧行為,我們就讓其不停的入棧,這是一個外循環。

2、如果入棧後超出了棧的規格,就退出循環。

3、在控制非空的條件下,如果棧頂與給定序列相同,那麽說明出棧行為發生了,出棧。並且回到第三步再進行判斷。

最後只要判斷序列是否被模擬完即可。

AC代碼:

#include <stdio.h> 
#include <stack> 
#include <algorithm>

using namespace std;

int main(){ // freopen("1051.txt","r",stdin); int m,n,k,i; int a[1001]; scanf("%d%d%d",&m,&n,&k); while(k--) { int cur=1; stack<int> s; for(i=1;i<=n;i++) scanf("%d",&a[i]); for(i=1;i<=n;i++){ s.push(i);
if(s.size()>m) break; while(!s.empty() && s.top()==a[cur]){ s.pop(); cur++; } } puts(cur==n+1?"YES":"NO"); } return 0; }

數據結構 | 棧:1051