스택(Stack) 구현: 자바스크립트를 활용한 데이터 처리

스택은 데이터를 FILO(First In Last Out) 방식으로 처리하는 선형 자료구조입니다. 스택은 데이터의 삽입(push), 삭제(pop), 최상위 데이터 확인(peek), 비어있는지 확인(isEmpty) 등의 작업을 할 수 있습니다. 연결 리스트를 사용하여 스택을 구현할 경우, 이러한 작업들이 매우 효율적으로 수행될 수 있습니다.

1. 스택의 추상 자료형 구현

스택의 기본적인 기능을 아래와 같이 구현할 수 있습니다. 이 예에서는 연결 리스트(LinkedList)를 사용하여 스택을 구현하였습니다.

// Stack.mjs

import { LinkedList } from "./LinkedList.mjs";

class Stack {
  constructor() {
    this.list = new LinkedList();
  }

  // 데이터 삽입
  push(data) {
    this.list.insertAt(0, data);
  }

  // 데이터 제거
  pop() {
    if (this.isEmpty()) {
      return null;
    }
    const node = this.list.deleteAt(0);
    return node ? node.data : null;
  }

  // 최상위 데이터 확인
  peek() {
    if (this.isEmpty()) {
      return null;
    }
    return this.list.getNodeAt(0).data;
  }

  // 스택이 비어있는지 확인
  isEmpty() {
    return this.list.count === 0;
  }
}

export { Stack };

2. 스택의 사용

스택의 기능을 테스트하기 위해 다음과 같은 테스트 코드를 작성할 수 있습니다.

// test_stack.mjs

import { Stack } from "./Stack.mjs";

const stack = new Stack();
console.log("스택에 데이터 추가:");
stack.push(1);
stack.push(2);
stack.push(3);
stack.push(4);

console.log("스택의 최상위 데이터 확인 (peek):");
console.log(stack.peek()); // 출력: 4

console.log("스택에서 데이터 제거 (pop):");
while (!stack.isEmpty()) {
  console.log(stack.pop()); // 출력: 4, 3, 2, 1
}

console.log("스택이 비어있는지 확인 (isEmpty):");
console.log(stack.isEmpty()); // 출력: true

스택은 데이터를 관리하는 데 특히 유용한 자료구조로, 후입선출(LIFO)의 특성을 가지고 있어서 호출 스택, 브라우저 방문 기록, 괄호 검사 등 다양한 상황에서 활용될 수 있습니다. 연결 리스트를 기반으로 구현된 스택은 데이터의 동적인 추가 및 제거에 용이하며, 데이터 처리 과정에서 발생할 수 있는 다양한 시나리오를 효율적으로 처리할 수 있습니다.

'공부 > 그림으로 쉽게 배우는 자료구조와 알고리즘 (기본편)' 카테고리의 다른 글

큐 - 구현  (0) 2024.01.28
큐 - 개념  (0) 2024.01.28
스택 - 개념  (0) 2024.01.28
연결리스트 - 구현  (0) 2024.01.28
연결리스트 - 개념  (0) 2024.01.28