#include <stdio.h>
#include <stdlib.h>
#define MAX_QUEUE_SIZE 10
typedef int element;
typedef struct {
int front;
int rear;
element data[MAX_QUEUE_SIZE];
}QueueType;
void error(char* message) {
fprintf(stderr, "%s\n", message);
exit(1);
}
void init_queue(QueueType* q) {
q->rear = -1;
q->front = -1;
}
void queue_print(QueueType* q) {
for (int i = 0;i < MAX_QUEUE_SIZE;i++) {
if (i <= q->front || i > q->rear)
printf(" | ");
else
printf("%d | ", q->data[i]);
}
printf("\n");
}
int is_full(QueueType* q) {
if (q->rear == MAX_QUEUE_SIZE - 1)
return 1;
else
return 0;
}
int is_empty(QueueType* q) {
if (q->front == q->rear)
return 1;
else
return 0;
}
void enqueue(QueueType* q, int item) {
if (is_full(q)) {
error("큐가 포화상태입니다.");
return;
}
q->data[++(q->rear)] = item;
}
int dequeue(QueueType* q) {
if (is_empty(q)) {
error("큐가 공백상태입니다.");
return -1;
}
int item = q->data[++(q->front)];
return item;
}
int main(void) {
int item = 0;
QueueType q;
init_queue(&q);
for (int i = 1;i <= 10;i++) {
queue_print(&q);
enqueue(&q, i * 10);
}
for (int i = 1;i <= 10;i++) {
item = dequeue(&q);
queue_print(&q);
}
}
설명 : 첫 번째 for문에서 생성한 q에 1부터 10까지 넣고 두 번째 for문에서 선입선출에 따라 1부터 10까지 차례로 데이터를 삭제한다.