7-2 回文判断 (20 分)
回文是指正读反读均相同的字符序列,如“abba”和“abdba”均是回文,但“good”不是回文。编写一个程序,使用栈判定给定的字符序列是否为回文。
输入格式:
输入待判断的字符序列,按回车键结束,字符序列长度<20。
输出格式:
若字符序列是回文,输出“YES”;否则,输出“NO”。
输入样例:
abdba
输出样例:
YES
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
typedef char Data;
typedef struct Stack
{
Data data;
struct Stack* next;
}LinkStack;
LinkStack* init()
{
LinkStack* lS = (LinkStack*)malloc(sizeof(LinkStack));
lS->next = NULL;
return lS;
}
int push(LinkStack* ls, Data data)
{
LinkStack* newNode = (LinkStack*)malloc(sizeof(LinkStack));
newNode->data = data;
newNode->next = ls->next;
ls->next = newNode;
return 1;
}
int pop(LinkStack* ls, Data* data)
{
LinkStack* del = ls->next;
if (ls->next == NULL)
{
printf("栈空");
return 0;
}
*data = del->data;
ls->next = del->next;
free(del);
return 1;
}
int main()
{
LinkStack* ls = init();
char str[20];
char n[20];
char cs[20] = {
0};
scanf("%s", str);
strcpy(n, str);
int len = strlen(str);
for (int i = 0; i < len; i++)
{
push(ls, str[i]);
}
for (int i = 0; i < len; i++)
{
pop(ls, str);
cs[i] = *str;
}
if (strcmp(n, cs))
{
printf("NO");
}
else
{
printf("YES");
}
return 0;
}