#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;
}