任务描述
本关任务:假设I和O分别代表入栈和出栈操作。栈的始态和终态都为空。入栈和出栈的操作序列可以表示为仅由I和O组成的序列,称可操作的序列为合法序列,否则称为非法序列。请设计一个算法,判断所给的操作序列是否合法。若合法输出“true”,反之输出“false”。
编程要求
输入
多组数据,每组数据一行,对应一个后缀算术表达式,每个表达式均以“=”结尾。当表达式只有一个“=”时,输入结束。
输出
多组数据,每组数据为一行长度不定的操作序列A。当A为“0”时,输入结束。
测试说明
平台会对你编写的代码进行测试:
测试输入:
IOIOIO
IIOOOO
0
预期输出:
TRUE
FALSE
公主王子们请看代码:
bool Judge(char a[],SqStack &S)
{//栈的可操作判断
/**************begin************/
for(int i=0;a[i]!='\0';i++)
{
if(a[i]=='I')
{
Push(S);
}
else
{
if(S.top==S.base)
return 0;
else
Pop(S);
}
}
if(S.top!=S.base)//判断最后栈是否为空
return 0;
else
return 1;
/**************end************/
}
因为任务描述中写了栈的始态和终态都为空(加粗部分),所以在循环结束后还需判断一下栈是否为空,如果不为空则返回0。(我当时就是因为没看见这个条件卡了很久,呜呜呜....)