Problem1814--【栈和队列】3-6 基于栈的可操作判断

1814: 【栈和队列】3-6 基于栈的可操作判断

Time Limit: 1 Sec  Memory Limit: 128 MB
Submit: 3  Solved: 3
[Submit] [Status] [Web Board] [Creator:]

Description

假设I和O分别代表入栈和出栈操作。栈的始态和终态均为空。入栈和出栈的操作序列可以表示为仅由I和O组成的序列,称可操作的序列为合法序列,否则称为非法序列。请设计一个算法,判断所给的操作序列是否合法。若合法输出“true”,反之输出“false”。

Input

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

Output

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

Sample Input Copy

IOIOIO
IIOOOO
0

Sample Output Copy

TRUE
FALSE

HINT

#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;
}

Source/Category