代码运行出来是全是回文,不知道哪里错了,代码图片如下,能帮忙看看吗
代码修改如下:
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <stdlib.h>
#define MAXSIZE 1024
typedef char datatype;
typedef struct {
datatype* base;
datatype* top;
}charStack;
//初始化栈
int InitStack(charStack* S)
{
S->base = (char*)malloc(MAXSIZE);
if (S->base == NULL)
return 1;
S->top = NULL;
return 0;
}
//销毁栈
void DestroyStack(charStack* S)
{
if (S->base)
free(S->base);
}
//入栈
int PushStack(charStack* S, datatype ch)
{
if (S->top - S->base == MAXSIZE - 1)
return 1;
else if (S->top == NULL)
{
S->top = S->base;
*(S->top) = ch;
}
else
{
S->top++;
*(S->top) = ch;
}
return 0;
}
//出栈
int PopStack(charStack* S, datatype* ch)
{
if (S->top == NULL)
return 1;
else
{
*ch = *(S->top);
if (S->top == S->base)
S->top = NULL;
else
S->top--;
return 0;
}
}
typedef struct {
datatype* base;
datatype* front;
datatype* rear;
}charQueue;
//初始化队列
int InitQueue(charQueue* Q)
{
Q->base = (char*)malloc(MAXSIZE);
if (Q->base == NULL)
return 1;
Q->front = Q->base;
Q->rear = Q->base;
return 0;
}
void DestroyQueue(charQueue* Q)
{
if (Q->base)
free(Q->base);
Q->base = 0;
}
//入队
int InQueue(charQueue* Q, datatype ch)
{
if (Q->rear - Q->front == MAXSIZE)
return 1;
else
{
*(Q->rear) = ch;
Q->rear++;
return 0;
}
}
//出队
int OutQueue(charQueue* Q, datatype *ch)
{
if (Q->front >= Q->rear)
return 1;
else
{
*ch = *(Q->front);
Q->front++;
return 0;
}
}
void HuiWen(int n, const datatype* str)
{
int i;
int flag = 1;
for (i = 0; i < n; i++)
printf("%c",str[i]);
charStack S;
charQueue Q;
InitStack(&S);
InitQueue(&Q);
for (i = 0; i < n; i++)
{
PushStack(&S, str[i]);
InQueue(&Q, str[i]);
}
datatype x, y;
int r1 = 0, r2 = 0;
while (1)
{
r1 = PopStack(&S, &x);
r2 = OutQueue(&Q, &y);
if (r1 == 0 && r2 == 0 && x == y)
continue;
else if (r1 == 1 && r2 == 1)
break;
else
{
printf("不是回文\n");
return;
}
}
printf("是回文\n");
}
int main()
{
HuiWen(4, "abba");
HuiWen(5, "abcba");
HuiWen(5, "abcde");
HuiWen(6, "ababba");
return 0;
}
怎么这么多文件啊???不能发源代码么,可以调试一下
偏偏OutQueue函数代码没有贴出来啊