티스토리 뷰
>문제
> 핵심
큐
>풀이과정
이 문제도 자료구조 시간때 큐를 배워본 사람이라면 누구나 한번쯤은 만들어 봤을 문제인 것 같다,
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;
}
'알고리즘 > 기타' 카테고리의 다른 글
[C] 백준 | 11866번 코드 - 요세푸스 문제 0 (0) | 2021.03.02 |
---|---|
[C] 백준 | 10866번 코드 - 덱 (0) | 2021.03.01 |
[C] 백준 | 10828번 코드 - 스택 (0) | 2021.03.01 |
[C] 백준 | 10816번 코드 - 숫자 카드 2 (0) | 2021.03.01 |
[C] 백준 | 10773번 코드 - 제로 (0) | 2021.02.28 |
댓글