#include "stdio.h"
#include "stdlib.h"
#include "string.h"
typedef char datatype;
typedef struct node
{
datatype data;
struct node * pNext;
}linklist;
typedef struct
{
linklist *front,*rear;
}linkqueue;
void SETNULLQL(linkqueue *q)
{
q->front=(linklist*)malloc(sizeof(linklist));
q->front->pNext=NULL;
q->rear=q->front;
}//置空队
bool EMPTYQL(linkqueue*q)
{
if(q->front==q->rear)
return true;
else return false;
}//判断队空
datatype FRONTQL(linkqueue*q)
{
if(EMPTYQL(q))
{
printf("队空");
return -1;
}
else return(q->front->pNext->data);
}//取队头元素
void ENQUEUEQL(linkqueue *q,datatype x)
{
q->rear->pNext=(linklist *)malloc(sizeof(linklist));
q->rear=q->rear->pNext;
q->rear->data=x;
q->rear->pNext=NULL;
}//入队
datatype DEQUEUEQL(linkqueue*q)
{
datatype temp;
linklist * s;
if(EMPTYQL(q))
{
printf("队空");
return -1;
}
else{
s=q->front->pNext;
if(s->pNext==NULL)
{
q->front->pNext=NULL;
q->rear=q->front;
}
else q->front->pNext=s->pNext;
temp=s->data;
free(s);
return(temp);
}
}//删除队头元素并返回队头元素
bool DuiChen(datatype *str)
{
linkqueue*q;
int n,i,j;
datatype ch;
i=0;
n=strlen(str);
q=(linkqueue*)malloc(sizeof(linkqueue));
SETNULLQL(q);
while(i<(n/2))
{
ENQUEUEQL(q,str[i]);
i++;
}
i++;
j=1;
while(i<n)
{
ch=str[n-j];
if(ch!=DEQUEUEQL(q))
return false;
j++;
i++;
}
return true;
}//关键函数判断是否对称
int main()
{
datatype str[100];
printf("请输入字符串:");
scanf("%s",str);
if(DuiChen(str)){
printf("是对称字符串。。。/n");
return 1;
}
else{
printf("不是对称字符串。。。/n");
return 0;
}
return 0;
}