利用顺序栈和顺序队列判断回文

代码运行出来是全是回文,不知道哪里错了,代码图片如下,能帮忙看看吗

img

img

img

代码修改如下:

#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函数代码没有贴出来啊

您好,我是有问必答小助手,您的问题已经有小伙伴帮您解答,感谢您对有问必答的支持与关注!
PS:问答VIP年卡 【限时加赠:IT技术图书免费领】,了解详情>>> https://vip.csdn.net/askvip?utm_source=1146287632