回文是指正读反读均相同的字符序列,如“abba”和“abdba”均是回文,但“good”不是回文。编写一个程序,使用栈判定给定的字符序列是否为回文。
输入格式:
输入待判断的字符序列,按回车键结束,字符序列长度<20。
输出格式:
若字符序列是回文,输出“YES”;否则,输出“NO”。
输入样例:
abdba
输出样例:
YES
#include<iostream>
#include<cstdlib>
#include<string.h>
using namespace std;
#define N 20
struct Stack{
char s[N];
int top;//指示栈顶元素
};
Stack *SetNullS(Stack *S){//置空栈
S->top = -1;
return S;
}
int Empty(Stack *S){
if(S->top >=0) return 0;
else return 1;
}
Stack *PushStackS(Stack *S, char c){//进栈
if(S->top == N-1){
return NULL;
}
else{
S->top++;
S->s[S->top] = c;
}
return S;
}
char *PopS(Stack *S){//出栈
if(S->top < 0) return NULL;
else{
S->top--;
char *c = (char *)malloc(sizeof(char));
*c = S->s[S->top+1];
return c;
}
}
int main(){
char a[N], b[N];
Stack *S = (Stack*)malloc(sizeof(Stack));
SetNullS(S);
cin>>a;
if(strlen(a) == 0) cout<<"NO";
for(int i=0; i<strlen(a); i++){
PushStackS(S, a[i]);
}
for(int i=0; i<strlen(a); i++){
b[i] = *(PopS(S));
}
if(strcmp(a, b)) cout<<"NO";
else cout<<"YES";
return 0;
}