스택(Stack)이란?

스택은 “쌓다”라는 의미로, 데이터를 차곡차곡 쌓아 올린 형태의 자료구조이다.

후입선출/ LIFO(Last In First Out) 의 자료 구조 즉 데이터가 순서대로 쌓이며 가장 마지막에 삽입된 자료가 가장 먼저 삭제되는 구조 를 가지고 있다.

Stack 작동원리

스택은 후입선출 구조로 이루어져 있다.

위의 그림을 보면 가장 먼저 들어온 a가 가장 마지막에 쌓여있고 가장 나중에 들어온 c가 가장 위에 놓여져 있다. 데이터를 넣고 빼는 입구가 하나뿐인 스택은 가장 위에 쌓인 데이터를 먼저 꺼내도록 작동한다.

Stack 구조

스택은 아래 그림과 같은 구조로 이루어져 있다.

|500

  • Bottom: 가장 밑에 있는 데이터 또는 Index
  • Top: 가장 위에 있는 데이터 또는 Index
  • Capacity: 스택에 담을 수 있는 데이터의 총 용량
  • Size: 현재 스택에 담겨져있는 데이터의 개수

Stack 기본 연산

  • pop(): 스택에서 가장 위에 있는 원소를 삭제하고 그 원소를 반환한다.
  • append(item): item 하나를 스택의 가장 윗 부분에 추가한다.
  • peek(): 스택의 가장 위에 있는 원소를 반환한다. (삭제하지는 않는다.)
  • empty(): 스택이 비어있따면 1, 아니면 0을 반환한다.

Stack 구현

파이썬에서는 스택을 List 또는 Linked List로 구현한다.

  • S.append(): 리스트 맨 끝에 원소를 추가한다.

  • S.pop(i): 리스트의 i번째 원소를 삭제한다.

    • S.pop(-1): 맨 앞에 있는 원소를 삭제한다.

Stack 활용

  • 재귀 알고리즘
  • DFS(Depth First Search) 알고리즘
  • 웹 브라우저 뒤로가기
  • 문자열 역순 출력
  • 후위 표기법 계산
  • 실행 취소(undo)

Time Complexity

Stack의 삽입이나 삭제시 맨 위의 데이터를 삭제하기 때문에 늘 O(1)이다.

하지만 특정 데이터를 찾을 때는 데이터를 찾을 때까지 순차적으로 수행해야 하므로 O(n)

Reference

스택(Stack)
스택(Stack)과 큐(Queue)에 대해서 알아보자!
스택(Stack), 큐(Queue)
스택(Stack)