#include "stdio.h"
#include "stdlib.h"
#include "string.h"
typedef char datatype;
typedef struct node
{
datatype data;
struct node * pNext;
}linklist;
void PUSHL(linklist **S,datatype e)
{
linklist *p;
p=(linklist*)malloc(sizeof(linklist));
p->data=e;
p->pNext=*S;
*S=p;
}//入栈
datatype POPL(linklist **S)
{
datatype X;
if((*S)==NULL)
{
printf("栈溢出/n");
return -1;
}
else
{
X=(*S)->data;
(*S)=(*S)->pNext;
return(X);
}
}//出栈
bool MYFUNC(linklist *strl)
{
linklist*q,*p;
int n=0,i=0;
datatype ch;
p=strl;
while(p)
{
p=p->pNext;
n++;
}
p=strl;
q=(linklist*)malloc(sizeof(linklist));
while(i<(n/2))//i是为了记数,让一半的字符入栈;
{
PUSHL(&q,p->data);
p=p->pNext;
i++;
}
i++;//使i指向未入栈的字符;
while(i<n)
{
if(i==(n+1)/2)//判断是否偶数个字符;
p=p->pNext;
ch=p->data;
if(ch!=POPL(&q))//调用的时候用了**;
return false;
p=p->pNext;
i++;
}
return true;
}//关键函数判断是否对称
int main()
{
datatype str[100];
int i=0;
linklist * strl,*p,*h;
strl=(linklist *)malloc(sizeof(linklist));
h=strl;
printf("请输入字符串:");
scanf("%s",str);
strl->data=str[i];
i++;
strl->pNext=NULL;
while(str[i]!='/0')
{
p=(linklist *)malloc(sizeof(linklist));
p->data=str[i];
i++;
strl->pNext=p;
strl=p;
strl->pNext=NULL;
}
strl=h;
if(MYFUNC(strl)){
printf("是对称字符串。。。/n");
return 1;
}
else{
printf("不是对称字符串。。。/n");
return 0;
}
return 0;
}