02-线性结构3 Pop Sequence

本文介绍了一个使用栈数据结构来验证特定整数序列是否有效的算法。该算法通过一系列的推入(pop)和弹出(push)操作来判断输入的整数序列是否能由初始状态为0的栈生成,同时栈的最大容量受限。程序还实现了读取多个测试用例并返回YES或NO以表明序列是否有效。

这里写图片描述

#include<stdio.h>
#include<stdlib.h>
#define MAX 1000
typedef struct node
{
    int data[MAX];
    int top;    
}stack;
stack *createstack()
{
    stack *s;
    s=(stack *)malloc(sizeof(stack));
    s->top=-1;
    return s;
}
void push(stack *s,int item)
{
    if(s->top==MAX-1)
    {
        printf("堆满\n");
        return;
    }
    else
        s->data[++s->top]=item;
}
void pop(stack *s)
{
    if(s->top==-1)
    {
        printf("堆空\n");
        return;
    }
    else
        s->top--;
}
int check(int a[],int N,int M)
{
    stack *s;
    int i=0,num=0;//i为计数不大于N,num为要处理的数字
    s=createstack();
    push(s,0);//初始栈不为空,top=0,存入0
    while(i!=N)
    {
        if(s->top>M)//栈满
            return 0;
        else
        {
            if(s->data[s->top]<a[i])
                push(s,++num);
            else if(s->data[s->top]==a[i])
            {
                pop(s);
                i++;
            }
            else
                return 0;
        }
        /*if(s->data[s->top]<a[i]&&s->top<M)
               push(s,++num);
        else if(s->data[s->top]==a[i])
        {
            pop(s);
            i++;
        }
        else
            return 0;*/
    }
    return 1;
}
int main()
{
    int **a,K,N,M,i,k;
    scanf("%d %d %d",&M,&N,&K);
    a=(int **)malloc(K*sizeof(int *));
    for(i=0;i<K;i++)
        a[i]=(int *)malloc(N*sizeof(int));
    for(k=0;k<K;k++)
    {
        for(i=0;i<N;i++)
            scanf("%d",&a[k][i]);
    }
    for(k=0;k<K;k++)
    {
        if(check(a[k],N,M))
            printf("YES\n");
        else
            printf("NO\n");
    }
    free(a);
        return 0;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值