问题
回文是指从正读反读均相同的字符序列,如“abba”和“abdba"均是回文,但“good”不是回文。
试写出一个算法判定给定的字符序列是否回文。(提示:将一半字符入栈)
解答
/*
回文是指从正读反读均相同的字符序列,如“abba”和“abdba"均是回文,但“good”不是回文。
试写出一个算法判定给定的字符序列是否回文。(提示:将一半字符入栈)
*/
#include <iostream>
using namespace std;
#define MAXSIZE 10000
typedef struct {
char *base;
char *top;
int stackSize;
}SqStack;
void initStack(SqStack &s) {
s.base = new char[MAXSIZE];
if (!s.base) {
exit(1);
}
s.top = s.base;
s.stackSize = MAXSIZE;
}
void push(SqStack &s, char x) {
if (s.top - s.base == s.stackSize) {
return ;
}
*s.top++ = x;
}
void pop(SqStack &s, char &x) {
if (s.top == s.base) {
return ;
}
x = *--s.top;
}
char getTop(SqStack s) {
if (s.top != s.base) {
return *(s.top - 1);
}
return '0';
}
bool isPalindrome(char *a) {
SqStack s;
initStack(s);
int len = strlen(a);
for (int i = 0; i < len / 2; ++i) {
push(s, a[i]);
}
char x;
for (int i = len % 2 == 0 ? len / 2 : len / 2 + 1; i < len; ++i) {
if (a[i] != getTop(s)) {
return false;
} else {
pop(s, x);
}
}
return true;
}
int main() {
char a[MAXSIZE];
while (cin >> a) {
if (isPalindrome(a)) {
cout << "是回文串" << endl;
} else {
cout << "不是回文串" << endl;
}
}
return 0;
}