배열로 Queue 만들기 (C)

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

typedef struct queue {
    int front;
    int rear;
    int size;
    int capacity;
    int* array;
} Queue;

Queue* createQueue(int capacity) {
    Queue* queue = (Queue *)malloc(sizeof(Queue));
    memset(queue, 0, sizeof(Queue));
    queue->capacity = capacity;
    queue->front = 0;
    queue->size = 0;
    queue->rear = capacity-1; // 왜 이렇게 초기화 했는지 잘 생각해 보세요!
    queue->array = (int *)malloc(sizeof(int)*queue->capacity);
    return queue;
}

int isFull(Queue* queue) {
    return (queue->size == queue->capacity);
}

int isEmpty(Queue* queue) {
    return (queue->size == 0);
}

void enqueue(Queue* queue, int item) {
    if (isFull(queue)) {
        return;
    }
    printf("%d enqueued to queue\\n", item);
    queue->rear++;
    queue->rear %= queue->capacity;
    queue->array[queue->rear] = item;
    queue->size++;

}

int dequeue(Queue* queue) {
    if (isEmpty(queue)) {
        return -9999;
    }
    int item = 0;
    item = queue->array[queue->front];
    queue->front++;
    queue->front %= queue->capacity;
    queue->size--;
    return item;
}

int main() {
    Queue* queue = createQueue(1000);

    enqueue(queue, 10);
    enqueue(queue, 20);
    enqueue(queue, 30);
    enqueue(queue, 40);

    for(int i=0; i<4; i++) {
        printf("%d ", queue->array[i]);
    }
    printf("\\n");
    printf("%d dequeued from queue\\n\\n", dequeue(queue));
    printf("%d dequeued from queue\\n\\n", dequeue(queue));
    printf("%d dequeued from queue\\n\\n", dequeue(queue));
    printf("%d dequeued from queue\\n\\n", dequeue(queue));
    printf("%d dequeued from queue\\n\\n", dequeue(queue));
    return 0;
}