入队函数失效,不知道什么原因?

file.c文件


#include "file.h"

/*输入:  
 q:队列(数据结构  
 smax:队列中可以存储的最大元素数,也就是队列的长度 */

//给对列初始化
void initQueue(queue_t *q, int smax){ 
    //分配一个长度为smax的数组来存储队列元素  
    q->array = (int *)malloc(smax*sizeof(int));

    //初始化
    q->front = 0;
    q->rear = 0;
    q->size = 0;
    q->sizeMax = 0;
}

//释放队列内存空间
void freeQueue(queue_t *q){
    if (q->array){
        free(q->array);
    }
}

//元素入列
int enqueue(queue_t *q, int val){
    int insert = 0;

    /*首先检查队列是否满*/
    if (q->size < q->sizeMax){
        q->array[q->rear] = val;
        q->rear++;

        /*如果我们已经到达终点,那么后部返回0*/
        //此时如果运行了if语句就证明队列已经满了
        if (q->rear == q->sizeMax){
            q->rear = 0;
        }
        q->size++;
        insert = 1;
    }
    return insert;
}

//出队
void displayQueue(queue_t *q){
    int cpt = 0;

    printf("queue = ");
    while (cpt < q->size){
        //注意:队列并不总是从0开始
        printf("%d ", q->array[(q->front+cpt) % q->sizeMax]);
        cpt++;
    }
    printf("\n");
    
}

//检验队列是否满了  
int dequeue(queue_t *q){
    /*总是离开第一个元素(FIFO策略)*/
    int val = q->array[q->front];

    q->size--;
    q->front++;

    /*看看我们是否到达了数组的末端*/
    if (q->front == q->sizeMax)
        q->front = 0;

    return val;
}

//是否为空
int isEmptyQueue(queue_t *q){
    return (q->size == 0);
}

main.c文件


#include "file.h"

int main(){
    queue_t q;
    int N = 5;

    /*第一次初始化*/
    initQueue(&q, N);

    /*测试我们唯一的函数*/
    printf("queue Empty? %d\n", isEmptyQueue(&q));

    /*首先在队列中放入一些东西*/
    enqueue(&q, 10);
    enqueue(&q, 2);
    enqueue(&q, 7);

    /*输出打印*/
    displayQueue(&q);

    //打印单个队列元素
    printf("dequeue: %d\n", dequeue(&q));
    printf("dequeue: %d\n", dequeue(&q));
    printf("dequeue: %d\n", dequeue(&q));

    printf("queue Empty? %d\n", isEmptyQueue(&q));

    enqueue(&q, 20);
    enqueue(&q, 5);
    enqueue(&q, 14);
    enqueue(&q, 20);
    enqueue(&q, 5);
    enqueue(&q, 14);

    

    displayQueue(&q);
    
    freeQueue(&q);
    return 0;
}

file.h文件


#pragma once

#include <stdio.h>
#include <stdlib.h>

typedef struct queue
{
    /* data(数据) */
    int sizeMax;//数组最大容量(长度)
    int size;//实际容量(有效值数目)

    int front;//下一个删除的索引(即第一个元素的索引,如果不是空队列),front是下一个删除的标签
    int rear;//下一个插入的索引,rear是下一个添加的标签

    int *array;//存储队列的数组
}queue_t;

void initQueue(queue_t *q, int smax);
void freeQueue(queue_t *q);
int enqueue(queue_t *q, int val);
void displayQueue(queue_t *q);
int dequeue(queue_t *q);
int isEmptyQueue(queue_t *q);

makefile文件


exe: file.o main.o
    gcc -o exe file.o main.o
file.o: file.c file.h
    gcc -g -c file.c -Wall
main.o: main.c file.h
    gcc -g -c main.c -Wall
clean:
    rm exe file.o main.o

运行结果确实这样

img