Post

스택(Stack)

스택(Stack)

1. 스택 개념

스택은 데이터를 한 쪽 끝에서만 넣고 뺄 수 있는 후입선출(LIFO, Last In First Out) 방식의 자료구조입니다. 즉, 가장 나중에 넣은 데이터가 가장 먼저 나옵니다.

Image

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.