#include<stdio.h>
#include<stdlib.h>
#define MAX_SIZE 10
//큐를 구조체로 선언
typedef int element;
typedef struct {
element queue[MAX_SIZE];
int front, rear;
} QueueType;
//포화상태, 공백상테 error 처리
void error(char *message) { // *은 문자열
fprintf(stderr,"%s\n", message);
exit(1);
}
//초기화 함수
void init(QueueType *q) {
q->front = q->rear =0;
}
//삽입 함수
void enqueue(QueueType *q, element item) {
if ((q->rear+1)%MAX_SIZE == q->front)
error("큐가 포화 상태입니다");
q->rear = (q->rear+1)%MAX_SIZE; //rear값 0-1-1
q->queue[q->rear] = item;
}
//삭제 함수
element dequeue(QueueType *q) {
if (q->front == q->rear)
error("큐가 공백 상태입니다");
q->front = (q->front+1)%MAX_SIZE;
return q->queue[q->front];
}
int main() {
QueueType q;
init(&q);
printf("item=%d\n", q.queue[q.front]);
printf("front=%d\n", q.front);
printf("rear=%d\n", q.rear);
enqueue(&q, 99);
printf("\nitem=%d\n", q.queue[q.front+1]);
printf("front=%d\n", q.front);
printf("rear=%d\n", q.rear);
enqueue(&q, 88);
enqueue(&q, 77);
enqueue(&q, 66);
printf("\nitem=%d\n", q.queue[q.rear]);
printf("front=%d\n", q.front);
printf("rear=%d\n", q.rear);
enqueue(&q, 55);
enqueue(&q, 44);
enqueue(&q, 33);
enqueue(&q, 22);
enqueue(&q, 11);
printf("\nitem=%d\n", q.queue[q.rear]);
printf("front=%d\n", q.front);
printf("rear=%d\n", q.rear);
dequeue(&q);
printf("\nitem=%d\n", q.queue[q.front]);
printf("front=%d\n", q.front);
printf("rear=%d\n", q.rear);
enqueue(&q, 98);
printf("\nitem=%d\n", q.queue[q.rear]);
printf("front=%d\n", q.front);
printf("rear=%d\n", q.rear);
dequeue(&q);
dequeue(&q);
dequeue(&q);
dequeue(&q);
dequeue(&q);
dequeue(&q);
dequeue(&q);
dequeue(&q);
dequeue(&q);
printf("\nitem=%d\n", q.queue[q.front]);
printf("front=%d\n", q.front);
printf("rear=%d\n", q.rear);
dequeue(&q);
}
/*
item=1
front=0
rear=0
item=99
front=0
rear=1
item=66
front=0
rear=4
item=11
front=0
rear=9
item=99
front=1
rear=9
item=98
front=1
rear=0
item=98
front=0
rear=0
큐가 공백 상태입니다
--------------------------------
Process exited after 0.0127 seconds with return value 1
계속하려면 아무 키나 누르십시오 . . .
*/
댓글