算法设计题:
(2)回文是指正读反读均相同的字符序列,如 “abba” 和 “abdba” 均是回文,但 “good” 不
是回文。试写一个算法判定给定的字符序列是否为回文。(提示:将 一 半字符入栈)
#include <stdio.h>
#include <string.h>
#include <iostream>
typedef struct SNode
{
char data;
struct SNode *next;
} SNode, *LinkStack;
void InitStack(LinkStack &S)
{
S = NULL;
}
void Push(LinkStack &S, char ch)
{
SNode *p = new SNode;
p->data = ch;
p->next = S;
S = p;
}
void Pop(LinkStack &S, char &ch)
{
if (!S)
return;
SNode *p = new SNode;
p = S;
ch = S->data;
S = S->next;
delete p;
}
void ShowStr(char str[], int begin, int end)
{
for (int i = begin; i < end; i++)
{
printf("%c", str[i]);
}
printf("\n");
}
int main(void)
{
char str[20];
printf("请输入字符序列:");
scanf("%s", str);
int length = strlen(str);
int half;
if (length % 2)
half = (length / 2) + 1;
else
half = length / 2;
LinkStack S;
InitStack(S);
for (int i = 0; i < half; i++)
{
Push(S, str[i]);
//printf("%c", S->data);
}
//printf("\n");
char ch;
int flag = 0;
for (int i = length % 2 ? half - 1 : half; i < length; i++)
{
Pop(S, ch);
if (ch == str[i])
flag = flag + 1;
}
//printf("%d\n", flag);
if (flag == half)
{
printf("%s是回文\n", str);
}
else
printf("%s不是回文\n", str);
return 0;
}
暑假自学中,如有错误请见谅和点评。