- 데이터를 후입선출, Last In First Out (LIFO) 원칙을 따르는 자료구조
- 프링글스를 떠올리면 되는데, 가장 처음 넣은 과자가 밑에 들어가고, 마지막에 넣은 과자가 맨 위에 위치, 꺼낼땐 맨 위에 있는 과자부터 꺼내게 되는 구조
특징
- LIFO 원칙 : 마지막에 들어간 요소가 가장 먼저 출력
- 접근 제한 : 구조상 데이터의 끝쪽에서만 추가, 제거가 가능
- 주요 연산 : push(추가), pop(제거), peek(top 조회) 모두 O(1) 시간 복잡도를 가짐
장점과 단점
- 장점 : 구현이 간단하고, 데이터 추가, 삭제가 빠름
- 단점 : 데이터 접근이 top에만 한정되어 있어, 특정 데이터에 접근할려면 top의 데이터들을 모두 제거해야 함
사용처
- 프로그래밍 문제 같은 경우엔 괄호의 쌍을 검사할 때 활용
- 페이지 또는 명령어의 되돌리기, 이전 기능을 구현할 때 활용
- 함수 호출 시 Call Stack으로 활용, 재귀 함수가 깊어지면 Stack Overflow가 발생하는 이유
예시 코드
class Stack {
constructor() {
this.elements = [];
}
push(item) {
this.elements.push(item);
}
pop() {
return this.elements.pop();
}
peek() {
const size = this.elements.length;
return this.elements[size - 1];
}
}
const stack = new Stack();
stack.push(1);
stack.push(3);
stack.push(5);
console.log(stack.peek());
console.log(stack.pop());
console.log(stack.peek());