스택(Stack)
스택(Stack)
1. 스택 개념
스택은 데이터를 한 쪽 끝에서만 넣고 뺄 수 있는 후입선출(LIFO, Last In First Out) 방식의 자료구조입니다. 즉, 가장 나중에 넣은 데이터가 가장 먼저 나옵니다.
2. 기본 연산
- push(item): 스택의 맨 위에 데이터(item)를 추가합니다.
- pop(): 스택의 맨 위 데이터를 제거하고 반환합니다. 스택이 비어 있으면 오류가 발생할 수 있습니다.
- peek() / top(): 스택의 맨 위 데이터를 제거하지 않고 반환합니다.
- isEmpty(): 스택이 비어 있는지 확인합니다.
3. 내부 구조
스택은 배열이나 연결 리스트로 구현할 수 있습니다.
- 배열 기반 스택은 인덱스를 통해 빠르게 접근 가능하지만 크기가 고정될 수 있습니다.
- 연결 리스트 기반 스택은 크기 제한이 없고 동적으로 확장 가능하지만 포인터 관리가 필요합니다.
4. 활용 사례
- 함수 호출 스택: 프로그래밍 언어의 함수 호출과 반환 과정을 관리합니다.
- 수식 계산 및 괄호 검사: 중위 표현식을 후위 표현식으로 변환하거나, 괄호가 짝이 맞는지 검사할 때 사용됩니다.
- 뒤로 가기 기능: 웹 브라우저나 앱에서 이전 화면으로 돌아갈 때 방문 기록을 관리합니다.
- Undo 기능: 편집기에서 작업 취소를 구현할 때 스택에 이전 상태를 저장합니다.
5. 코드 예시 (Swift)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
struct Stack<T> {
private var elements = [T]()
mutating func push(_ item: T) {
elements.append(item)
}
mutating func pop() -> T? {
return elements.popLast()
}
func peek() -> T? {
return elements.last
}
var isEmpty: Bool {
return elements.isEmpty
}
}
6. 마무리
스택은 단순하지만 다양한 분야에서 핵심적으로 쓰이는 자료구조입니다. 문제를 해결할 때 스택의 특성을 이해하고 적절히 활용하면 효율적인 알고리즘 구현이 가능합니다.
This post is licensed under CC BY 4.0 by the author.