出栈合法性 - STL-栈的应用

题目描述
已知自然数1,2,…,N(1<=N<=100)依次入栈,请问序列C1,C2,…,CN是否为合法的出栈序列。
输入
输入包含多组测试数据。
每组测试数据的第一行为整数N(1<=N<=100),当N=0时,输入结束。
第二行为N个正整数,以空格隔开,为出栈序列。
输出
对于每组输入,输出结果为一行字符串。
如给出的序列是合法的出栈序列,则输出Yes,否则输出No。
样例输入
5
3 4 2 1 5
5
3 5 1 4 2
0
样例输出
Yes
No
代码
用STL中stack的方法:

#include
#include
#include
#include
using namespace std;
int main()
{
    int n;
    while(~scanf("%d",&n)&&n)
    {
        int a[105];
        stack<int> s;
        scanf("%d",&a[0]);
        int i=0;
        for(i=1;i<=a[0];i++)
            s.push(i);
        s.pop();
        int flag=1;
        for(int k=1;kscanf("%d",&a[k]);
            if(a[k]==i){
                i++;
            }else if(a[k]==s.top()){
                s.pop();
            }else{
                flag=0;
            }
        }
        if(flag)
            printf("Yes\n");
        else
            printf("No\n");
    }
    return 0;
}

自己写的stack栈的方法

#include
#include
#include
#include
#define MAXSIZE 100
using namespace std;
typedef int SElemType;
typedef struct
{
    SElemType *base;
    SElemType *top;
    int stacksize;
}SqStack;
void InitStack(SqStack &S)
{
    S.base=new SElemType [MAXSIZE];
    if(!S.base) exit(0);
    S.top=S.base;
    S.stacksize=MAXSIZE;
}
bool Push(SqStack &S,SElemType e)
{
    if(S.top-S.base==S.stacksize) return false;
    *S.top++=e;
    return true;
}
SElemType Pop(SqStack &S)
{
    SElemType e;
    if(S.top==S.base) return 0;
    e=*--S.top;
    return e;
}
char GetTop(SqStack S)
{
    if(S.top!=S.base)
        return *(S.top-1);
}
int main()
{
    int n;
    int a[105];
    while(~scanf("%d",&n)&&n)
    {
        SqStack s;
        InitStack(s);
        scanf("%d",&a[0]);
        int i=0;
        for(i=1;i<=a[0];i++)
            Push(s,i);
        Pop(s);
        int flag=1;
        for(int k=1;kscanf("%d",&a[k]);
            if(a[k]==i){
                i++;
            }else if(a[k]==GetTop(s)){
                Pop(s);
            }else{
                flag=0;
            }
        }
        if(flag)
            printf("Yes\n");
        else
            printf("No\n");
    }
    return 0;
}

你可能感兴趣的:(C/C++,数据结构,STL)