🧱 스택(Stack)과 큐(Queue) 기본 개념과 활용 예시
스택(Stack)과 큐(Queue)는 가장 기본적인 자료구조로 둘 다 데이터를 넣고 꺼내는 방식에 관한 자료구조이지만 데이터가 들어간 순서에 따라 꺼내는 방식이 다르다. 각각의 기본 개념과 차이점에 대해 알아보자.
스택(Stack)이란?
스택은 “쌓는다”는 개념에 가장 잘 어울리는 자료구조이다. 가장 나중에 넣은 데이터가 가장 먼저 나오는 구조로써 후입선출(LIFO, Last-In-First-Out) 방식으로 동작한다.
주요 기능
- push(item) - 스택에 데이터를 추가한다.
- pop() - 스택에서 가장 위에 있는 데이터를 제거하고 반환한다.
- peek() 또는 top() - 가장 위의 데이터를 확인한다.
- isEmpty() - 스택이 비어 있는지 확인하고 boolean을 반환한다.
- size() - 현재 스택에 있는 요소 개수를 반환한다.
대표적인 활용 예시는 다음과 같다.
1. 웹 브라우저의 뒤로 가기 기능
사용자가 방문한 페이지를 스택에 저장해두고 뒤로 가기를 누르면 최근 페이지부터 꺼낸다.
2. 재귀 함수 처리 (콜 스택)
함수가 호출될 때마다 스택에 쌓이고 리턴될 때 하나씩 빠져나온다.
3. 문자열 괄호 유효성 검사
여는 괄호를 스택에 넣고 닫는 괄호가 나올 때마다 꺼내서 짝이 맞는지 확인한다.
4. DFS(Depth-First Search, 깊이 우선 탐색)
스택을 이용해 그래프의 깊은 부분부터 탐색한다.
큐(Queue)란?
큐는 먼저 들어온 데이터가 먼저 나가는 구조로 선입선출(FIFO, First-In-First-Out)방식으로 동작한다.
주요 기능
- enqueue(item) - 큐의 뒤쪽(rear)에 데이터를 추가한다.
- dequeue() - 큐의 앞쪽(front)에서 데이터를 제거하고 반환한다.
- peek() 또는 front() - 가장 앞에 있는 데이터를 반환한다.
- isEmpty() - 큐가 비어 있는지 확인하고 boolean을 반환한다.
size() - 현재 큐에 있는 요소 개수를 반환한다.
대표적인 활용 예시는 다음과 같다.
1. 프린터 대기열 처리
인쇄 요청이 들어온 순서대로 문서를 출력한다. 가장 먼저 요청한 문서가 먼저 처리된다.
2. CPU 작업 스케줄링
여러 개의 작업을 시간 순서대로 처리할 때 큐를 이용한다.
3. 이벤트 처리 시스템
사용자 이벤트, 네트워크 요청 등은 순차적으로 처리되기 때문에 큐 구조가 적합하다.
4. BFS(Breadth-First Search, 너비 우선 탐색)
그래프나 트리 구조에서 가까운 노드부터 탐색할 때 큐를 사용한다.