BJFU_数据结构习题_242基于栈的回文字符序列判断

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

242基于栈的回文字符序列判断

描述
回文序列是正反读均相同的字符序列,如“abba”和“abdba”均是回文,但是“good”不是回文。请设计一个算法判定给定的字符序列是否为回文。
输入
多组数据,每组数据有一行。每一行为一个长度不定的字符序列A。当A为“0”时,输入结束。
输出
对于每组数据输出一行。若字符序列A是回文序列,则输出“YES”,否则输出“NO”。
输入样例 1
abba
abdba
good
0
输出样例 1
YES
YES
NO

#include<iostream>
using namespace std;
#define  MAX 100 
#define  OK	0
#define  ERROR -1
#define  OVERFLOW -2
typedef struct 
{
	char *top;
	char *base;
	int stacksize;
}SqStack;
int	InitStack(SqStack &S)
{
	S.base=new char[MAX];
	if(!S.base)	return OVERFLOW;
	S.top=S.base;
	S.stacksize=MAX;
	return OK;
}
int Push(SqStack &S,int e)  
{
	if(S.top-S.base==S.stacksize)
        return ERROR; 	
	*S.top=e;
	S.top++;
	return OK;
}
int Pop(SqStack &S)  
{
	if(S.top==S.base)
		return ERROR;
	S.top--;	
	return *S.top;
}
int IsHuiwen(char *t)
{
	SqStack S;
	InitStack(S);
	int i,len=0;
  	for(i=0;t[i]!='\0';i++)
      len++;
	for(i=0;i<len/2;i++)
		Push(S,t[i]);
	if(len%2!=0)
		i++;
	for(;t[i]!='\0';i++)
	{  
		if(Pop(S)!=t[i])	
			return 0;
	}
	return 1; 
}
int main()
{
  	char t[100];
	while(cin>>t&&t[0]!='0')
	{
		if(IsHuiwen(t)==1)
			cout<<"YES"<<endl;
		else
			cout<<"NO"<<endl;
	}
	return 0;
}

猜你喜欢

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