Responsive image

问题 F: 第6关:基于栈的可操作判断

问题 F: 第6关:基于栈的可操作判断

时间限制: 1 Sec  内存限制: 128 MB
提交: 0  解决: 251
[提交][状态][讨论版][命题人:]

题目描述

本关任务:假设I和O分别代表入栈和出栈操作。栈的始态和终态均为空。入栈和出栈的操作序列可以表示为仅由I和O组成的序列,称可操作的序列为合法序列,否则称为非法序列。请设计一个算法,判断所给的操作序列是否合法。若合法输出“true”,反之输出“false”。
#include <iostream>
#define MAXSIZE 100
#define OK 1
#define ERROR 0
#define OVERFLOW -2
using namespace std;
typedef struct
{
    char *base;
    char *top;
    int stacksize;
}SqStack;
int InitStack(SqStack &S)
{//初始化栈
S.base=new char[MAXSIZE];
if(!S.base) return OVERFLOW;
S.top=S.base;
S.stacksize=MAXSIZE;
return OK;
}
int Push(SqStack &S)
{//入栈
S.top++;
return OK;
}
int Pop(SqStack &S)
{//出栈
S.top--;
return OK;
}
int IsEmpty(SqStack S)
{//判断栈是否为空,空返回1,否则返回0
return S.top==S.base;
}
bool Judge(char a[],SqStack &S)
{//栈的可操作判断
/**************begin************/



/**************end************/
}
int main()
{
    char a[100];
    while(cin>>a)
    {
        if(a[0]=='0') break;
        SqStack op;
        InitStack(op);
        if(Judge(a,op)) cout<<"TRUE"<<endl;
        else cout<<"FALSE"<<endl;
    }
    return 0;
}

输入描述

多组数据,每组数据一行,对应一个后缀算术表达式,每个表达式均以“=”结尾。当表达式只有一个“=”时,输入结束。

输出描述

多组数据,每组数据为一行长度不定的操作序列A。当A为“0”时,输入结束。

样例输入

IOIOIO
IIOOOO
0

样例输出

TRUE
FALSE

提示

组合提交代码,你仅需要提交


bool Judge(char a[],SqStack &S)

{//栈的可操作判断

/**************begin************/







/**************end************/

}






[提交][状态]
ACM算法攻关部