티스토리 뷰

>문제

> 핵심

>풀이과정

이 문제도 자료구조 시간때 큐를 배워본 사람이라면 누구나 한번쯤은 만들어 봤을 문제인 것 같다,

enqueue와 dequeue할 때, SIZE로 나머지 연산을 하는 이유는 원형큐로 활용하기 위해서!

 

큐는 선입선출!

스택은 제일 늦게 들어온게 제일 먼저 팝!

 

그리고 C++에는 큐, 스택 라이브러리가 있는데 C는 그런게 없단다..

그래서 일일히 직접 손코딩으로 함수를 다 만들어서 써야한다. 이런! 

>깨달은점

큐는.. 스택보다는 쪼끔 어렵다!

>코드

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <string.h>

#define SIZE 10001

typedef struct
{
	int queue[SIZE];
	int front, rear;
}QueueType;

void Queue_init(QueueType* q)
{
	q->front = q->rear = 0;
}

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

int is_full(QueueType* q)
{
	return (q->front == (q->rear + 1) % SIZE);
}

void enqueue(QueueType* q, int e)
{
	if (is_full(q))
		return;

	q->rear = (q->rear + 1) % SIZE;
	q->queue[q->rear] = e;
}

int dequeue(QueueType* q)
{
	if (is_empty(q))
		return -1;

	q->front = (q->front + 1) % SIZE;
	return q->queue[q->front];
}

int front(QueueType* q)
{
	if (is_empty(q))
		return -1;
	return q->queue[q->front + 1];
}

int back(QueueType* q)
{
	if (is_empty(q))
		return -1;
	return q->queue[q->rear];
}

int size(QueueType* q)
{
	if (q->front < q->rear)
		return q->rear - q->front;
	else
		return SIZE - q->front + q->rear;
}

int main()
{
	QueueType queue;
	Queue_init(&queue);

	int i, n, e;
	char op[6];

	scanf("%d", &n);

	for (i = 0; i < n; i++)
	{
		scanf(" %s", op);

		if (strcmp(op, "push") == 0)
		{
			scanf(" %d", &e);
			enqueue(&queue, e);
		}
		else if (strcmp(op, "pop") == 0)
		{
			e = dequeue(&queue);
			printf("%d\n", e);
		}
		else if (strcmp(op, "front") == 0)
		{
			e = front(&queue);
			printf("%d\n", e);
		}
		else if (strcmp(op, "back") == 0)
		{
			e = back(&queue);
			printf("%d\n", e);
		}
		else if (strcmp(op, "empty") == 0)
		{
			e = is_empty(&queue);
			printf("%d\n", e);
		}
		else if (strcmp(op, "size") == 0)
		{
			e = size(&queue);
			printf("%d\n", e);
		}
	}

	return 0;
}

 

댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/11   »
1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
글 보관함