주소 : https://www.acmicpc.net/problem/10845
10845번: 큐
첫째 줄에 주어지는 명령의 수 N (1 ≤ N ≤ 10,000)이 주어진다. 둘째 줄부터 N개의 줄에는 명령이 하나씩 주어진다. 주어지는 정수는 1보다 크거나 같고, 100,000보다 작거나 같다. 문제에 나와있지
www.acmicpc.net


소스 코드 :
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MAX_QUEUE_SIZE 10000
typedef int element;
typedef struct {
element data[MAX_QUEUE_SIZE];
int rear;
int front;
}QueueType;
void init_queue(QueueType* q)
{
q->front = -1;
q->rear = -1;
}
int is_empty(QueueType* q)
{
if (q->front == q->rear)
return 1;
else return 0;
}
int is_full(QueueType* q)
{
if (q->rear == MAX_QUEUE_SIZE - 1)
return 1;
else return 0;
}
void enqueue(QueueType* q, element item)
{
if (is_full(q))
return;
q->data[++(q->rear)] = item;
}
int dequeue(QueueType* q)
{
if (is_empty(q))
return -1;
int item = q->data[++(q->front)];
return item;
}
int main()
{
int num, n = 0;
char message[20];
QueueType q;
init_queue(&q);
scanf("%d", &num);
for (int i = 1; i <= num; i++)
{
scanf("%s", &message);
if (strcmp(message, "push") == 0)
{
scanf("%d", &n);
enqueue(&q, n);
}
else if (strcmp(message, "pop") == 0)
printf("%d\n", dequeue(&q));
else if (strcmp(message, "size") == 0)
printf("%d\n", q.rear-q.front);
else if (strcmp(message, "empty") == 0)
printf("%d\n", is_empty(&q));
else if (strcmp(message, "front") == 0)
if (is_empty(&q))
printf("-1\n");
else printf("%d\n", q.data[q.front + 1]);
else if (strcmp(message, "back") == 0)
if (is_empty(&q))
printf("-1\n");
else printf("%d\n", q.data[q.rear]);
}
return 0;
}
마무리 : 스택 문제와 같이 특정 입력을 한다면 그것에 맞게 행한다. C는 큐를 직접 만들어야하기 때문에 위와 같이 작성을 해야한다.
'백준 > C' 카테고리의 다른 글
백준 10828번 : 스택 [C] (0) | 2022.08.17 |
---|---|
백준 10773번 : 제로 [C] (0) | 2022.08.17 |
백준 2164번 : 카드2 [C] (0) | 2022.08.11 |
백준 1259번 : 팰린드롬수 [C] (0) | 2022.08.04 |
백준 15829번 : Hashing [C] (0) | 2022.08.03 |