#include<stdio.h>
#include<stdlib.h>
typedef char datatype;
typedef struct stacknode{
datatype data;
struct stacknode *next;
}stacknode;
typedef struct {
stacknode *top;
}linkstack;
//置空栈
void initstack(linkstack *p)
{
p->top=NULL;
}
//判断是否空栈
int stackempty(linkstack *p)
{
return p->top==NULL;
}
//入栈
void push(linkstack *s,datatype x)
{
stacknode *q=(stacknode*)malloc(sizeof(stacknode));
q->data=x;
q->next=s->top;//将新结点*p插入链栈头部
s->top=q;
}
//退栈
datatype pop(linkstack *S)
{
datatype x;
stacknode *p=S->top;//保存栈顶指针
if(stackempty(S))
{}
// Error("Stack underflow."); //下溢
else
{
x=p->data; //保存栈顶结点数据
S->top=p->next; //将栈顶结点从链上摘下
free(p);
return x;
}
}
int huiwen(char *str)
{
linkstack *T=( linkstack* )malloc( sizeof(linkstack) );
int i , L;
char t;
initstack(T);
L=strlen(str); //求向量长度
for (i=0; i<=(L/2);i++)
{push(T,str[i]);
}
while( !stackempty(T))
{
// 每弹出一个字符与相应字符比较
t=pop(T);
if( t!=str[L-i]) { return 0 ;}// 不等则返回0
i--;
}
return -1 ; // 比较完毕均相等则返回 -1
}
int main(void)
{
char str[100];
canf("%s",str);
if(huiwen(str))
printf(" \n这个字符串是回文。");
else printf("\n这个字符串不是回文。");
}
授人以鱼不如授人以渔