Algorithm

[C์–ธ์–ด] - ์›ํ˜• ํ Circular Queue

say! 2023. 1. 11. 17:55
728x90

๐Ÿ”ต ์›ํ˜• ํ๋Š” ํ•ญ์ƒ ํ•˜๋‚˜์˜ ์ž๋ฆฌ๋ฅผ ๋น„์›Œ๋‘ 

> ํฌํ™” ์ƒํƒœ - front๊ฐ€ rear๋ณด๋‹ค ํ•˜๋‚˜ ์•ž์— ์žˆ๋Š” ๊ฒฝ์šฐ

   front == (rear + 1) % Mํํฌ๊ธฐ

> ๊ณต๋ฐฑ ์ƒํƒœ - front == rear ์ธ ๊ฒฝ์šฐ

 

๐ŸŸก ์›ํ˜• ํ ์ฝ”๋“œ

#include <stdio.h>
#include <stdlib.h>

#define MAX_SIZE 10

typedef int element;
typedef struct {
	int front, rear;
	element data[MAX_SIZE];
} QueueType;

void init(QueueType* q) {
	q->front = -1;
	q->rear = -1;
}

int is_full(QueueType* q) {
	return q->front == (q->rear + 1) % MAX_SIZE;	// ์›ํ˜• ํ์˜ ๊ฒฝ์šฐ
}

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

void enqueue(QueueType* q, int item) {
	if (is_full(q)) {
		printf("์—๋Ÿฌ");
		return;
	}
	else {
		q->rear = (q->rear + 1) % MAX_SIZE;
		q->data[(q->rear)] = item;
	}
}

int dequeue(QueueType* q) {
	if (is_empty(q)) {
		printf("์—๋Ÿฌ");
		return;
	}
	else {
		q->front = (q->front + 1) % MAX_SIZE;
		return q->data[(q->front)];
	}
}

int main() {
	int i;
	QueueType q;
	init(&q);

	enqueue(&q, 1);
	enqueue(&q, 2);
	enqueue(&q, 3);

	i = dequeue(&q);
	printf("%d\n", i);
	return 0;
}