02-线性结构4 Pop Sequence(25 分)

#include<bits/stdc++.h>
using namespace std;
#define maxs 1000
typedef struct node{
    int c;
    int top;
    int D[maxs];
}*Stack;
int is(int *p,int m,int n);
Stack creat(int m);
int push(Stack s,int x);
int Top(Stack s);
void dis(Stack s);
void Pop(Stack s);
int main()
{
    int m,n,k;
    cin>>m>>n>>k;
    int p[1000];
    while(k--)
    {
        for(int i=0;i<n;i++)
            cin>>p[i];
            if(is(p,m,n))
                cout<<"YES"<<endl;
            else
                cout<<"NO"<<endl;
    }
    return 0;
}
int is(int *p,int m,int n)
{
    Stack s=creat(m);
    int head=0;
    for(int i=1;i<=n;i++)
    {
        if(!push(s,i))
        {
            dis(s);
            return 0;
        }
        while(Top(s)==p[head])
        {
            head++;
            Pop(s);

        }
    }

    dis(s);
    if(head!=n)
        return 0;
    return 1;

}
Stack creat(int m)
{
    Stack s=(Stack)malloc(sizeof(node));
    s->c=m;
    s->top=-1;
    return s;
}
int push(Stack s,int x)
{
    if(s->c-s->top<=1)
        return 0;
        s->D[++s->top]=x;
        return 1;
}
int Top(Stack s)
{
    if(s->top>=0)
        return s->D[s->top];
    else
        return -1;
}
void dis(Stack s)
{
    free(s);
}
void Pop(Stack s)
{
    s->top--;
}

满足条件:

1.要判断m 不能超过m长,堆栈只能存这些长度

2.读入的同时要比较

猜你喜欢

转载自blog.csdn.net/wchenchen0/article/details/80148691