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;
}
'개발 > C' 카테고리의 다른 글
[C] 구조체의 멤버(문자열과 정수)를 scanf로 받을 때 주의할 점 (0) | 2022.10.13 |
---|---|
[C] 자료구조 - 연결리스트 (0) | 2022.10.13 |
[C] 함수의 매개변수가 구조체 포인터일 때, &붙여야 할까? (0) | 2022.10.11 |
[C] 포인터가 함수의 매개변수일 때 어떻게 값을 넘길 것인가? (1) | 2022.10.11 |
[C] 문자열의 원소(char)를 정수(int)로 바꾸기 (0) | 2022.10.09 |
댓글