版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
245基于栈的可操作判断
描述
假设I和O分别代表入栈和出栈操作。栈的始态和终态均为空。入栈和出栈的操作序列可以表示为仅由I和O组成的序列,称可操作的序列为合法序列,否则称为非法序列。请设计一个算法,判断所给的操作序列是否合法。若合法输出“true”,反之输出“false”。
输入
多组数据,每组数据为一行长度不定的操作序列A。当A为“0”时,输入结束。
输出
对应每组数据输出一行。若序列A为合法序列输出“TRUE”,反之输出“FALSE”。
输入样例 1
IOIOIO
IIOOOO
0
输出样例 1
TRUE
FALSE
#include<iostream>
using namespace std;
typedef struct LNode
{
char data;
struct LNode *next;
}LNode,*StackList;
int main()
{
char s[100];
while(cin>>s&&s[0]!='0')
{
StackList S=NULL,p,q;;
int flag=1;
for(int i=0; ;i++)
{
if(s[i]=='\0')
break;
if(s[i]=='I')
{
p=new LNode;
p->next=S;
S=p;
}
else
{
if(S==NULL)
{
cout<<"FALSE"<<endl;
flag=0;
break;
}
else
{
q=S;
S=S->next;
delete q;
}
}
}
if(flag==1)
{
if(S==NULL)
cout<<"TRUE"<<endl;
else
cout<<"FALSE"<<endl;
}
}
return 0;
}