자료구조_원형큐

지원·2025년 4월 11일
0

자료구조

목록 보기
8/11
post-thumbnail

원형큐

front, rear의 초기값: 0

% 연산자를 이용한다!!
데이터가 추가 => rear를 하나 증가 => 그 위치에 데이터 저장
데이터를 삭제 => front를 하나 증가 => 그 위치에 데이터 삭제

원형큐 연습하기

#define _CRT_SECURE_NO_WARNINGS
#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];
} QueueType;

//초기화 함수
void init_queue(QueueType* q) {
	q->front = q->rear = 0;
}

//is_full 함수
int is_full(QueueType *q) {
	return q->front == (q->rear + 1) % MAX_QUEUE_SIZE;
}

//is_empty 함수
int is_empty(QueueType *q) {
	return q->front == q->rear;
}

//데이터 삽입 함수
void enqueue(QueueType *q, element item) {
	if (is_full(q)) {
		printf("큐가 꽉 차있음\n");
		return;
	}
	else {
		q->rear = (q->rear + 1) % MAX_QUEUE_SIZE;
		q->data[q->rear] = item;
	}
}

//데이터 삭제 함수
element dequeue(QueueType* q) {
	if (is_empty(q)) {
		printf("큐가 비어있음\n");
		exit(1);
	}
	else {
		q->front = (q->front + 1) % MAX_QUEUE_SIZE;
		return q->data[q->front];
	}
}

//큐 출력 함수
void print_queue(QueueType *q) {
	printf("\n현재 큐 상태 (front: %d, rear: %d):\n", q->front, q->rear);
	printf("+-------------------------+\n");
	printf("| ");
	if (!is_empty(q)) {
		int i = q->front;
		do {
			i = (i + 1) % (MAX_QUEUE_SIZE);
			printf("%d ", q->data[i]);
			if (i == q->rear)
				break;
		} while (i != q->front);
	}
	printf("|\n+-------------------------+\n");
}

int main() {
	QueueType q;
	init_queue(&q);
	element item;

	printf("--원형큐에 데이터 추가--\n");
	while (!is_full(&q)) {
		printf("\n");
		printf("추가할 정수 입력: ");
		scanf_s("%d", &item);

		enqueue(&q, item);
		print_queue(&q);
	}
	printf("큐는 현재 포화상태!\n");
	printf("\n");

	printf("--원형큐에 데이터 삭제--\n");
	while (!is_empty(&q)) {
		element item = dequeue(&q);
		printf("꺼낸 정수 %d\n", item);

		print_queue(&q);
	}
	printf("큐는 현재 공백상태!\n");
	printf("\n");
	return 0;
}

원형큐 필기

0개의 댓글