7-3 出栈序列的合法性 (10 分)

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
这道题刚开始看了好久也是一脸懵逼,找到了规律但是代码实现不出来。翻看了其他博主的文章才知道有模拟入栈这种东西。我看完之后对模拟入栈的解释就是:给了出栈的顺序,然后你自己把那个序列入一次栈,看看符合不符合就完事了!附上那位博主的答案链接。@北极光。https://blog.csdn.net/nntcdhl/article/details/104880285?ops_request_misc=&request_id=&biz_id=102&utm_term=7-3%20%E5%87%BA%E6%A0%88%E5%BA%8F%E5%88%97%E7%9A%84%E5%90%88%E6%B3%95%E6%80%A7%20(10%20%E5%88%86)%20%E7%BB%99%E5%AE%9A%E4%B8%80%E4%B8%AA%E6%9C%80%E5%A4%A7%E5%AE%B9%E9%87%8F%E4%B8%BA%20&utm_medium=distribute.pc_search_result.none-task-blog-2allsobaiduweb~default-4-104880285.nonecase&spm=1018.2226.3001.4187
他的代码我没怎么认真看(因为看一遍下去没看懂QAQ),但是他的图就很好理解了,我就从他的图的思路出发,自己写了代码,也是能全AC的。自认为比较好理解,因为比较简单无脑。。。。。当然也有其他的规律可循,比如判断序列中的最大数的位置从而直接判断,与之相比,模拟入栈比较好实现,也能让我这个对课本知识陌生无比的呆逼,对栈的概念加深一点,所以我选择模拟入栈。课本知识学不懂,题目勉强也要写的!

//脑子不好的林林后
#include<stdio.h>
#include<stdlib.h>
void panduan(int b[],int len,int max)
{
    
    
    int a[1001];//实际上入栈的数组题目要求的将 N 个数字按 1, 2, 3, ..., N 的顺序入栈
    for(int i=0;i<len;i++)
    {
    
    
        a[i]=i+1;//存好这n个数组进a里边
    }
    int stack[1001];//模拟一个栈
    int t1=0,t2=-1;//t1判断数组a是否遍历到底。t2是栈空判断。
    stack[++t2]=a[0];//第一个元素先入栈
    for(int i=0;i<len;)//这一段好好去看那个博主画的图应该就能看懂
    {
    
    
        if(t2>=max&&t1!=len)//栈满的情况,也就是按照这个出栈序列的记过入栈根本不可能
        {
    
    
            printf("NO\n");
            return ;
        }
        else if(stack[t2]!=b[i])
        {
    
    
            stack[++t2]=a[++t1];//不相等就a数组里面的元素就继续入栈,同时stack栈内元素加1;
        }
        else //如果相等
        {
    
    
            t2--;
            i++;
        }
    }
    if(t2!=-1)
    {
    
    
        printf("NO\n");

    }else
    {
    
    
        printf("YES\n");
    }
}
int main()
{
    
    
    int max;//栈的最大容量
    scanf("%d",&max);
    int n,k;//入栈的元素个数、出栈序列数
    scanf("%d%d",&n,&k);
    int b[1001];
    for(int i=0;i<k;i++)
    {
    
    
        for(int j=0;j<n;j++)
        {
    
    
            scanf("%d",&b[j]);//每输入行出栈的序列就传到panduan函数里边进行模拟入栈判断
        }
        panduan(b,n,max);//将这一行传到函数中判断
    }
    return 0;
}

实在没看懂判断函数的话,拿我这个图去模拟一遍panduan函数的执行
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/yuemuc/article/details/120846294