基于栈的回文字符序列判断
描述
回文序列是正反读均相同的字符序列,如“abba”和“abdba”均是回文,但是“good”不是回文。请设计一个算法判定给定的字符序列是否为回文。
输入
多组数据,每组数据有一行。每一行为一个长度不定的字符序列A。当A为“0”时,输入结束。
输出
对于每组数据输出一行。若字符序列A是回文序列,则输出“YES”,否则输出“NO”。
样例输入1
abba abdba good 0
样例输出1
YES YES NO
解答:将字符串入栈,再出栈与原串比较是否相同。
#include<stdio.h>
#include<stdlib.h>
#define maxn 1000
typedef struct node
{
char *top;
char *base;
int maxsize;
} Stack;
int main()
{
int i;
char s[100];
Stack st;
st.base=(char *)malloc(maxn*sizeof(int));
while(1)
{
scanf("%s",s);
if(s[0]=='0')
break;
st.top=st.base;
for(i=0; s[i]!='\0'; i++)
{
*st.top=s[i];
st.top++;
}
for(i=0; s[i]!='\0'; i++)
{
if(s[i] != *(--st.top))
break;
}
if(s[i]=='\0')
printf("YES\n");
else
printf("NO\n");
}
return 0;
}