Skip to content

스택 (Stack)

스택은 데이터를 차곡차곡 쌓아 올리는 형태의 선형 자료구조이다.
가장 마지막에 들어온 데이터가 가장 먼저 나가는 후입선출(LIFO, Last-In First-Out) 원칙을 따른다.

Stack

스택의 정의와 특징

스택은 한쪽 끝에서만 삽입과 삭제가 일어나는 제한적인 자료구조이다.
이 때문에 데이터의 순서와 접근 방식이 중요한 알고리즘에 널리 활용된다.
대표적인 예시로 Undo/Redo, Call Stack, DFS (깊이 우선 탐색) 등이 있다.

주요 특징

후입선출(LIFO): 가장 나중에 추가된 요소가 가장 먼저 제거된다. 단방향 입출력: 데이터는 항상 스택의 Top에서만 추가되고 제거된다.

연산설명시간 복잡도
push(element)스택의 가장 위(top)에 요소를 추가합니다.O(1)
pop()스택의 가장 위(top) 요소를 제거하고 반환합니다.O(1)
peek()스택의 가장 위(top) 요소를 제거하지 않고 확인만 합니다.O(1)
isEmpty()스택이 비어있는지 확인합니다. (true/false)O(1)
size()스택에 포함된 요소의 개수를 반환합니다.O(1)

Javascript로 Stack 구현하기

javascript
class Stack {
  constructor() {
    this.items = []; // 배열을 사용하여 데이터를 저장
  }
  // 스택에 요소 추가
  push(data) {
    this.items.push(data);
  }
  // 스택에서 요소 제거 및 반환
  pop() {
    return this.items.pop();
  }
  // 스택의 최상단 요소 확인
  peek() {
    return this.items[this.size() - 1];
    // ES2022 -> return this.items.at(-1);
  }
  // 스택이 비어있는지 확인
  isEmpty() {
    return this.size() === 0;
  }
  // 스택의 크기 반환
  size() {
    return this.items.length;
  }
  // 스택 초기화
  clear() {
    this.items = [];
  }
}
const stack = new Stack();
stack.push(1); // [1]
stack.push(2); // [1, 2]
stack.push(3); // [1, 2, 3]
stack.pop(); // [1, 2]
stack.peek(); // 2

console.log(stack.isEmpty()); // false
stack.clear();
console.log(stack.isEmpty()); // true