数据结构 | 栈:1051

Posted TQCAI

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了数据结构 | 栈:1051相关的知识,希望对你有一定的参考价值。

这是一个栈的模拟题,同时“通过出栈序列判断是否合理”这样的考法在考研中经常遇到,也很有可能被命致为考研算法题,这类题的解题方法值得深究。

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的主要内容,如果未能解决你的问题,请参考以下文章

1051 Pop Sequence 入栈 出栈模拟

codevs 1051 接龙游戏(栈模拟)

1051 Pop Sequence (25 分)难度: 中 / 知识点: 模拟 栈

1051 Pop Sequence (25point(s)) 需要二刷*栈的出栈顺序问题

单调栈

830. 单调栈