BJFU_数据结构习题_245基于栈的可操作判断

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接: https://blog.csdn.net/weixin_43722827/article/details/102755272

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

猜你喜欢

转载自blog.csdn.net/weixin_43722827/article/details/102755272