개발/C
[C] 자료구조 - 선형 Queue
윤J
2022. 10. 11. 18:30
Queue: 선입선출
<Queue 자료구조>
#include <stdio.h>
#include <stdlib.h>
#define MAX_QUEUE_SIZE 5
typedef int element;
typedef struct {
int front;
int rear;
element data[MAX_QUEUE_SIZE]; //값 자체는 data에 저장됨
} 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;
}// rear이 가리키는 곳이 마지막 원소이면 1 return
int is_empty(QueueType* q) {
if (q->front == q->rear) {
return 1;
}
else
return 0;
}// front=rear 이면 큐가 빈 것임 그러면 1 return
void enqueue(QueueType* q, int item) {
if (is_full(q)) {// 여기 다시 한번만 q여도 되는지//
error("큐가 포화상태입니다. ");
return;
}
q->data[++(q->rear)] = item;
}//그냥 큐에 넣기만 해서 void 형
int dequeue(QueueType* q) {
if (is_empty(q)) {
error("큐가 공백상태입니다. ");
return -1;
}
int item = q->data[++(q->front)];
return item;
}//지우는 값 return >> int 형
<Queue 활용>
int main(void) {
int item = 0;
QueueType q;
init_queue(&q);
enqueue(&q, 10); queue_print(&q);
enqueue(&q, 20); queue_print(&q);
enqueue(&q, 30); queue_print(&q);
item = dequeue(&q); queue_print(&q);
item = dequeue(&q); queue_print(&q);
item = dequeue(&q); queue_print(&q);
return 0;
}