c语言实现队列的问题

#include
#include



#define MAX 10
typedef char TY_data;
typedef struct quece
{
    TY_data* a;
    int front;
    int rear;
}SqQueue;


void InitSqQueue(SqQueue* s);
void InitSqQueue(SqQueue* s)
{
    s->a = (TY_data*)malloc(sizeof(TY_data) * MAX);
    if (s->a = NULL)
    {
        exit(1);
    }
    s->front = 0;
    s->rear = 0;
    return 0;

}

int Queuelength(SqQueue s);
int Queuelength(SqQueue s)
{
    return (s.rear-s.front+MAX)%MAX;
}

void PutSqQueue(SqQueue*, TY_data);
void PutSqQueue(SqQueue* s, TY_data b)
{
    if ((s->rear+1)%MAX== s->front)
    {
        printf("队列已满\n");
        return 0;
    }

    s->a[s->rear] = b;
    s->rear =(s->rear +1)%MAX;

}

TY_data PopSqQuece(SqQueue* s);
TY_data PopSqQuece(SqQueue* s)
{
    if (s->front == s->rear)
    {
        printf("队列为空\n");
        return 0;
    }

    TY_data a ;
    a = s->a[s->front];
    s->front = (s->front + 1) % MAX;
    return a;
}

TY_data GetHead(SqQueue* s);
TY_data GetHead(SqQueue* s)
{
    if (s->front == s->rear)
    {
        printf("队列为空\n");
        return 0;
    }

    TY_data a = 0;
    a = s->a[s->front];
    return 0;
}

我知道我应该是在让数据进入与离开队列哪里出了问题,但是我却不明白为什么会出问题,求解答

第20行应该是if (s->a == NULL)

参考GPT和自己的思路:

根据你的代码,我发现在函数InitSqQueue中的判断条件错误,应该是判断s->a是否等于NULL而不是将它赋值为NULL,修改后代码如下:

void InitSqQueue(SqQueue* s)
{
    s->a = (TY_data*)malloc(sizeof(TY_data) * MAX);
    if (s->a == NULL)
    {
        exit(1);
    }
    s->front = 0;
    s->rear = 0;
}

另外,在函数GetHead中应该返回a而不是0,修改后代码如下:

TY_data GetHead(SqQueue* s)
{
    if (s->front == s->rear)
    {
        printf("队列为空\n");
        return 0;
    }

    TY_data a = 0;
    a = s->a[s->front];
    return a;
}

希望这些修正可以帮助你解决问题。