자료구조 : 스택(Stack), 큐(Queue), 덱(Deque)
스택 (Stack)
- LIFO (Last In First Out) : 후입선출 구조
- 한쪽 끝에서만 자료를 넣고 뺄 수 있는 접시처럼 쌓아올린 형태의 구조
- 삽입 (Push) : top에 데이터가 저장된다.
- 삭제 (Pop) : top의 데이터가 삭제된다.
- 자료가 없을 때 pop 하는 오류를
stack underflow
, 스택의 크기 이상의 자료를 push 하려고 할 때의 오류를stack overflow
라고 한다.
시간복잡도
- Insertion O(1)
- Deletion O(1)
- Search O(n)
삭제나 삽입시 맨 위에 데이터를 삽입하거나 삭제하기 때문에 시간복잡도는 늘 O(1)
의 시간복잡도를 가진다.
하지만 특정 데이터를 찾을 때는 특정 데이터를 찾을 때까지 수행을 해야하므로 O(n)
의 시간 복잡도를 가집니다.
Stack 활용 예시
- 재귀 알고리즘에서 유용하게 사용
- 역추적을 해야할 때 (ex. 문서 작업 시 실행 취소, 방문기록 뒤로 가기)
- 괄호 검사, 역순 문자열 만들기, 후위 표기법으로의 변환
큐 (Queue)
- FIFO (First In First Out) : 선입선출 구조
- 한쪽 끝에서 삽입 작업이, 다른 쪽 끝에서 삭제 작업이 양쪽으로 이루어지는 줄서서 기다리는 구조
- Enqueue : 큐 맨 뒤에 데이터 추가
- Dequeue : 큐 맨 앞쪽의 데이터 삭제
- head : dequeue 하였을 시 출력이 되는 부분 (유의어: front, first 등)
- tail : enqueue 하였을 시 입력이 되는 부분 (유의어: rear, back, last 등) // 다양하게 불린다.
시간복잡도
- Insertion O(1)
- Deletion O(1)
- Search O(n)
Stack 활용 예시
- 우선순위가 같은 작업 예약
- 데이터를 입력된 순서대로 처리해야 할 때
- 너비 우선 탐색(BFS, Breadth-First Search) 구현
- 은행 업무, 콜센터 대기
덱 (Deque)
- Deque (Double Ended Queue)
- 스택과 큐의 연산을 합쳐놓은 것이다.
- queue와 비슷하지만 deque는 front와 end에서 삭제와 삽입이 모두 가능하다.
- 여러 개의 메모리 단위로 데이터를 저장
- 크기가 가변적이다. (선언 후에 변경할 수 있다.)
Deque 활용 예시
- 앞과 뒤에서 삽입, 삭제가 자주 일어나는 경우
- 데이터의 개수가 가변적일 경우
- 데이터 검색을 거의 하지 않을 경우 (랜덤 요소에 접근해야 할 때)
[자료구조] 스택(Stack), 큐(Queue), 덱(Deque)
[자료구조] 스택 (STACK), 큐(QUEUE) 개념/비교 /활용 예시
스택, 큐 (Stack, Queue)
This post is licensed under CC BY 4.0 by the author.