to be the best000 2022-10-11 16:13 采纳率: 33.3%
浏览 124
已结题

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

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

img

img

img

  • 写回答

3条回答 默认 最新

  • 关注

    代码修改如下:

    #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;
    }
    
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论 编辑记录
查看更多回答(2条)

报告相同问题?

问题事件

  • 系统已结题 10月19日
  • 已采纳回答 10月11日
  • 修改了问题 10月11日
  • 修改了问题 10月11日
  • 展开全部

悬赏问题

  • ¥15 关于#matlab#的问题:在模糊控制器中选出线路信息,在simulink中根据线路信息生成速度时间目标曲线(初速度为20m/s,15秒后减为0的速度时间图像)我想问线路信息是什么
  • ¥15 banner广告展示设置多少时间不怎么会消耗用户价值
  • ¥16 mybatis的代理对象无法通过@Autowired装填
  • ¥15 可见光定位matlab仿真
  • ¥15 arduino 四自由度机械臂
  • ¥15 wordpress 产品图片 GIF 没法显示
  • ¥15 求三国群英传pl国战时间的修改方法
  • ¥15 matlab代码代写,需写出详细代码,代价私
  • ¥15 ROS系统搭建请教(跨境电商用途)
  • ¥15 AIC3204的示例代码有吗,想用AIC3204测量血氧,找不到相关的代码。