코딩 기록/자바스크립트

(JavaScript) 자바스크립트 스택(Stack, LIFO) 자료구조 구현

kimyang-Sun 2021. 2. 8. 23:37

자바스크립트 (JavaScript)

 

자바스크립트로 스택(Stack) 기능을 구현해봤습니다.

스택은 LIFO로 Last In First Out, 마지막으로 들어온 데이터가 처음으로 나가는 구조입니다.

 

// 스택 클래스
class Stack {
  constructor() {
    this._size = 0; // 현재 데이터 수
    this.head; // Stack 기준 현재 값
    this.tail; // Stack 기준 가장 마지막 값
  }

  // 묶여있는 _size를 밖에서 호출해주기 위해 getter를 사용합니다.
  get size() {
    return this._size;
  }

  // 스택 추가
  push(value) {
    const node = { value };
    if (this._size === 0) {
      this.head = node;
      this.tail = node;
    } else {
      node.next = this.head;
      this.head = node;
    }
    this._size++;
  }

  // 스택 제거
  pop() {
    if (!this.head) throw new Error('stack not exist..😑'); // 스택이 하나도 없는 상태면 에러 발생
    if (this.head.value === this.tail.value) {
      this.tail = undefined;
    }
    const next = this.head.next;
    this.head = next;
    this._size--;
  }

  // 스택 검색 = index
  search(num) {
    // 스택이 하나도 없거나 해당하는 스택이 없을 경우에 에러 발생
    if (!this.head) {
      throw new Error('stack not exist..😑');
    } else if (num < 0 || num >= this._size) {
      throw new Error('No corresponding stacks found..😣');
    }

    let count = this._size - 1;
    let current = this.head;
    while (num < count) {
      current = current.next;
      count--;
    }
    return current.value;
  }
}

 

주요기능

  • size : 현재 들어가있는 데이터의 수
  • push : 입력된 데이터를 추가하는 함수
  • pop : 데이터를 제거하는 함수
  • search : 입력된 숫자에 해당하는 데이터를 반환하는 함수 (배열의 index와 같습니다)

마지막으로 콘솔로 테스트 해보겠습니다.

 

const stack = new Stack(); // 클래스 생성
console.log(stack); // 초기 데이터

// 데이터 추가
stack.push('google');
console.log(stack);
stack.push('samsung');
console.log(stack);
stack.push('lg');
console.log(stack);

// index 확인
console.log(stack.search(0), stack.search(1), stack.search(2));

// 데이터 제거
stack.pop();
console.log(stack);
stack.pop();
console.log(stack);
stack.pop();
console.log(stack);

 

초기데이터

 

데이터 추가

 

Index 확인

 

데이터 제거

 

 

밑에는 타입스크립트의 스택입니다.

kimyang-sun.tistory.com/144

 

(TypeScript) 타입스크립트 스택(Stack, LIFO) 자료구조 구현

타입스크립트로 스택(Stack) 기능을 구현해봤습니다. 스택은 LIFO로 Last In First Out, 마지막으로 들어온 데이터가 처음으로 나가는 구조입니다. // 스택 추상화 인터페이스 interface Stack { readonly size:..

kimyang-sun.tistory.com