728x90
- 자료구조
- 연결 리스트
- 이진 트리
- 스택
- 큐
- 해시
- 정렬
- 버블 정렬
- 선택 정렬
- 삽입 정렬
- 퀵 정렬
- 힙 정렬
- 알고리즘
- 재귀 함수
- 너비 우선탐색(BFS)
- 깊이 우선탐색(DFS)
- 다익스트라
큐(Que)
큐는 기본적으로 선입선출(First In First Out)을 따른다.
큐라는 배열에 Enque()를 통해 데이터를 입력하고
Deque()를 통해 먼저 들어온 값부터 출력하는 구조이다.
Enque
- rear가 가리키는 위치에 데이터를 입력한다.
- rear를 1증가시킨다.
- 만일 rear가 큐의 max보다 크면 0으로 초기화한다.
Deque
- front가 가리키는 위치의 데이터를 출력한다.
- front를 1증가시킨다.
- 만일 front가 큐의 max보다 크면 0으로 초기화한다.
소스코드
#define __main
#ifdef __main
#include <stdio.h>
typedef struct __Que{
int* que; // 큐
int max; // 큐의 최대입력 개수
int num; // 현재 큐에있는 데이터 개수
int front; // Deque할 위치
int rear; // Enque할 위치
} Que;
void Init(Que* q, int max) {
q->que = malloc(sizeof(int) * max);
q->max = max;
q->front = q->rear = q->num = 0;
}
int Enque(Que* q, int x) {
if (q->num >= q->max) return -1; // 큐가 가득참
q->num++;
q->que[q->rear++] = x;
q->rear %= q->max; // 0 -> 1 -> ... -> max -> 0 -> 1
return 0;
}
int Deque(Que* q, int* x) {
if (q->num <= 0) return -1; // 큐가 비어있음
q->num--;
*x = q->que[q->front++];
q->front %= q->max; // 0 -> 1 -> ... -> max -> 0 -> 1
return 0;
}
int main() {
Que* q = malloc(sizeof(Que));
int tmp;
Init(q, 10);
Enque(q, 4);
Enque(q, 3);
Deque(q, &tmp);
Deque(q, &tmp);
q->max = q->num = q->front = q->rear = 0;
free(q->que);
return 0;
}
#endif
'프로그래밍 > C언어' 카테고리의 다른 글
[정렬] 버블 정렬 (0) | 2020.11.04 |
---|---|
[자료구조] 해시 (0) | 2020.11.01 |
[자료구조] 스택 (0) | 2020.10.30 |
[자료구조] 이진 트리 (0) | 2020.10.29 |
[자료구조] 연결 리스트 (0) | 2020.10.27 |