回文串判定
Time Limit: 1000MS Memory limit: 65536K
题目描述
输入一串字符(长度小于100),判断该串字符是否是回文串(正序读与逆序读内容相同)。
输入
输入一串字符(长度小于100)。
输出
若该串字符是回文串输出“yes",否则输出”no“。
示例输入
asdfgfdsa
示例输出
yes
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define stackmax 10000
#define stacknum 10000
typedef int ElemType;
typedef struct
{
ElemType *base;
ElemType *top;
int stacksize;
} SqStack;
int InitStack(SqStack &s)
{
s.base = (ElemType*) malloc (stackmax*sizeof(ElemType));
if (! s.base)
exit(0);
s.top = s.base;
s.stacksize = stackmax;
return 0;
}
char Push(SqStack &s , char e)
{
if(s.top-s.base >= s.stacksize)
{
s.base = (ElemType *)realloc(s.base,(s.stacksize+stacknum)*sizeof(ElemType));
if (! s.base ) exit(0);
s.top = s.base + s.stacksize;
s.stacksize += stacknum;
}
*s.top++=e;
}
int Pop(SqStack &s)
{
if(s.top == s.base) return 0;
s.top--;
return 1;
}
int GetTop(SqStack &s)
{
if(s.top == s.base) return 0;
char e=*(s.top-1);
return e;
}
int StackEmpty(SqStack &s)
{
if(s.top == s.base)
return 1;
else
return 0;
}
void putstack(SqStack &s)
{
while(s.top > s.base)
{
printf("%d", *(s.top-1));
s.top--;
}
}
char judge(SqStack &s, char c[])
{
int n=strlen(c), i;
for(i=0; i<n/2; i++)
{
Push(s, c[i]);
}
if(n%2==0)
{
for(i=n/2;i<n;i++)
{
if(GetTop(s)==c[i])
Pop(s);
else
break;
}
}
if(n%2!=0)
{
for(i=n/2+1;i<n;i++)
{
if(GetTop(s)==c[i])
Pop(s);
else
break;
}
}
if(StackEmpty(s)) printf("yes");
else printf("no");
}
int main()
{
char c[105];
SqStack s;
gets(c);
InitStack(s);
judge(s, c);
return 0;
}