개발/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;

}