[04. 스택과 큐] Queue 구현

DongWook Lee·2024년 7월 23일
#include <stdio.h>
#include <stdlib.h>

typedef struct {
	int max;
	int num;
	int front;
	int rear;
	int* que;
} Queue;

int Initialize(Queue* q, int max) {
	q->num = q->front = q->rear = 0;

	if ((q->que = (int*)calloc(max, sizeof(int))) == NULL) {
		q->max = 0;
		return -1;
	}
	q->max = max;
	return 0;
}

void Terminate(Queue* q) {
	if (q->que)
		free(q->que);
	q->max = q->num = q->front = q->rear = 0;
}

/////////////////////////////////////////////////////////////////////
int Enque(Queue* q, int x) {
	if (q->num >= q->max)
		return -1;
	else {
		q->num++;
		q->que[q->rear++] = x;
		if (q->rear == q->max)
			q->rear = 0;
		return 0;
	}
}

int Deque(Queue* q, int* x) {
	if (q->num <= 0)
		return -1;
	else {
		q->num--;
		*x = q->que[q->front++];
		if (q->front == q->max)
			q->front = 0;
		return 0;
	}
}
////////////////////////////////////////////////////////
int Peek(const Queue* q, int* x) {
	if (q->num <= 0)
		return -1;
	*x = q->que[q->front];
	return 0;
}

void Clear(Queue* q) {
	q->num = q->front = q->rear = 0;
}

int Capacity(const Queue* q) {
	return q->max;
}

int Size(const Queue* q) {
	return q->num;
}

int Empty(const Queue* q) {
	return q->num <= 0;
}

int IsFull(const Queue* q) {
	return q->num >= q->max;
}

int Search(const Queue* q, int x) {
	for (int i = 0; i < q->num; i++) {
		int idx = (q->front + i) % q->max;
		if (q->que[idx] == x)
			return idx;
	}
	return -1;
}

0개의 댓글