[Data Structure] C스타일의 원형큐 구현
원형 큐의 Enqueue와 Dequeue 구현
#include <stdio.h>
#include <stdbool.h>
#define MAX_SIZE 5
typedef struct {
int data[MAX_SIZE];
int rear;
int front;
} CircularQueue;
void initQueue(CircularQueue* q) {
q->rear = 0;
q->front = 0;
}
// 같다면 empty
int isEmpty(CircularQueue* q) {
return q->front == q->rear;
}
// 한칸 차이일때 full
// 사실상 모든 큐를 채우는 것이 아니다. 한칸을 남겨둬야 empty와 구분이 가능
int isFull(CircularQueue* q) {
return (q->rear + 1) % MAX_SIZE == q->front;
}
void enqueue(CircularQueue* q, int val) {
if (isFull(q)) {
printf("isfull\n");
return;
}
q->rear = (q->rear + 1) % MAX_SIZE;
q->data[q->rear] = val;
}
int dequeue(CircularQueue* q) {
if (isEmpty(q)) {
printf("isEmpty\n");
return -1;
}
q->front = (q->front + 1) % MAX_SIZE;
return q->data[q->front];
}
void display(CircularQueue* q) {
printf("Queue: ");
int i = (q->front + 1) % MAX_SIZE;
while (i != (q->rear + 1) % MAX_SIZE) {
printf("%d ", q->data[i]);
i = (i + 1) % MAX_SIZE;
}
printf("\n");
}
int main() {
CircularQueue q;
initQueue(&q);
enqueue(&q, 10);
enqueue(&q, 20);
enqueue(&q, 30);
enqueue(&q, 40);
display(&q);
dequeue(&q);
display(&q);
enqueue(&q, 50);
display(&q);
enqueue(&q, 60); // 큐가 가득 찼을 때 시도
display(&q);
return 0;
}