배열로 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;
}