为什么这里不能正确判断是否为回文字符串
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <stdlib.h>
#define max 100
typedef struct
{
char data[max];
int front;
int rear;
}queque;
typedef struct
{
char data[max];
int size;
}stack;
void initque(queque* q)
{
q->front = q->rear = 0;
}
void initstack(stack* s)
{
s->size = 0;
}
void push(stack* s, char x)
{
if (s->size == max)
{
printf("栈满了\n");
}
else
{
s->data[s->size] = x;
s->size = (s->size + 1);
}
}
char popstack(stack* s)
{
char z;
if (s->size == 0)
{
printf("栈空\n");
return '0';
}
else
{
z = s->data[s->size];
s->size = (s->size - 1);
return z;
}
}
void enterque(queque* q, char x)
{
if ((q->rear + 1) % max == q->front)
{
printf("队列已满\n");
}
else
{
q->data[q->rear] = x;
q->rear = (q->rear + 1);
}
}
char popque(queque* q)
{
char c;
if (q->front == q->rear)
{
printf("队列为空\n");
return '0';
}
else {
c = q->data[q->front];
q->front = (q->front + 1);
return c;
}
}
int define(stack* s, queque* q)
{
char v;
int flag = 1;
printf("请输入需要判断回文的字符串:\n");
while ((v = getchar()) != '\n')
{
push(s, v);
enterque(q, v);
}
while (q->front == q->rear)
{
if (popstack(s) != popque(q))
{
flag = 0;
break;
}
}
if (flag == 1) printf("是回文字符串\n");
else printf("不是回文字符串\n");
return 0;
}
int main(void)
{
stack* s = (stack*)malloc(sizeof(stack));
queque* q = (queque*)malloc(sizeof(queque));
initstack(s);
initque(q);
define(s, q);
return 0;
}