Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- storagemanger
- entityrelational
- datamodel
- Implementation
- designpatternn
- db
- kafka
- database
- json #typescript
- SW
- DP
Archives
- Today
- Total
i.am.developer
[자료구조] 큐 본문
스택과 큐
스택과 큐는 데이터를 저장하는 동적인 자료구조이다. 스택은 LIFO(last in first out) 구조이고 큐는 FIFO(first in first out) 구조이다.
큐
데이터가 FIFO의 흐름을 갖고 있다. 줄 서는 것을 생각하면 된다. 먼저 온 사람이 먼저 들어간다.데이터의 삽입은 뒤(rear), 데이터의 삭제는 (front)에서 이루어진다. 종종 head, tail이라 한다. 항목이 큐에 삽입될 때는 Enqueue, 상목이 큐에서 제거될 때는 Dequene. 빈 큐에 Dequeue하려는 것은 Underflow, 가득 찬 큐에 Enqueue하려는 것은 Overflow이다.
큐의 앞부분을 front, 혹은 head라고 하고 뒷부분을 rear 혹은 tail이라 한다.
큐는 공간낭비를 방지하기 위해 대개 Circular (원형) 배열을 사용한다.
Q[1, ..., n]의 큐는 n-1개의 요소를 저장할 수 있다. (하나를 쓰지 않는 이유는 Circular를 활용하기 위함이다.)
- tail은 마지막 요소의 다음, 즉 새로 들어올 자리를 표시한다.
- head는 큐의 머리, 첫 부분을 가리킨다.
- 큐 안의 항목들은 Q.head, Q.head+1, ..., Q.tail - 1 까지 있고 n 다음은 1이다. (Circular)
- 초기 시작은 Q.head = Q.tail = 1 이다.
- 만약 Q.head == Q.tail 이면 Q는 empty Queue이다.
- 만약 Q.head == Q.tail + 1 이면 Q는 이미 full 이다. 이 상태에서 Enqueue하게될 경우 overflow가 발생한다.
주요연산
EnQueue(Q, x):
Q[Q.tail] = x
if Q.tail == Q.length:
Q.tail = 1
else:
Q.tail = Q.tail + 1
DeQueue(Q):
x = Q[Q.head]
if Q.head == Q.length:
Q.head = 1
else:
Q.head = Q.head + 1
return x
'프로그래밍 > Algorithm' 카테고리의 다른 글
Uniform Cost Search와 A* Search (0) | 2020.07.01 |
---|---|
[자료구조] 스택 (0) | 2020.03.10 |
[알고리즘] 멱집합 (0) | 2020.03.10 |
[알고리즘] BFS - Breadth First Search (0) | 2020.03.06 |
[Problem] 백준 14940번 쉬운 최단거리 (0) | 2019.04.20 |