나중에 넣은 것을 먼저 꺼내는(Last In, First Out) 자료구조. 접시를 쌓듯 맨 위에서만 넣고(push) 꺼낸다(pop). 넣기·꺼내기 모두 O(1)이다.
const stack: number[] = []
stack.push(1); stack.push(2)
stack.pop() // 2JavaScript에서는 배열의 push·pop으로 충분하다. unshift·shift로 앞쪽을 쓰면 매번 원소를 밀어 O(n)이 되니 뒤쪽을 쓴다. 직접 만든다면 연결 리스트의 머리에 넣고 빼는 방식이 된다.
어디에 쓰나
- 콜 스택(Call Stack): 함수를 부르면 실행 맥락이 쌓이고 끝나면 빠진다. 재귀가 깊어지면 넘쳐서 스택 오버플로(Stack Overflow)가 난다. 자바스크립트가 콜 스택이 빌 때 다음 작업을 꺼내는 흐름은 이벤트 루프 참고
- 되돌리기: 편집기의 실행 취소 기록(커맨드 패턴)
- 브라우저 뒤로 가기 기록
- 괄호 짝 맞추기, 수식 계산, 구문 분석
- 깊이 우선 탐색: 재귀 대신 명시적 스택으로 구현할 수 있다
먼저 넣은 것을 먼저 꺼내는 반대 구조는 큐다.