[TIL][DataStructure] Queue & Stack JS구현

김태수·2020년 10월 25일
0

datastructure

목록 보기
1/4

Data Structure 중 가장 간단한 Queue 와 Stack 에 대하여 학습한 내용을 남겨두려 한다.
추후 Linked List & Hash Table 그리고 Graph, Tree, BST 를 순서대로 기록할 예정이다.

// Data Structure 를 하나씩 소개 할때마다 이미지를 그려나가는 것도 적지않은 수고가 드는것 같다...

Queue

queue 는 FIFO (First In First Out, 선입선출) 형태를 가진 자료구조이며, 아마 나와같은 개발 입문자들이 생각하기에
가장 쉽게 이해할 수 있는 자료구조 일것이다.

실생활에서의 예제를 들어보자면
먼저 온 사람이 먼저 나가는 티켓 줄, 또는 에스컬레이터 등을 생각할 수 있으며
컴퓨터 세계 에서는
먼저 전송온 자료부터 프린트 하는 프린트기기등이 있다.

클래스를 이용한 큐의 생성과, 요소의 추가, 제거, 사이즈 조회를 수행하는 메소드를 구현하였다.

class Queue {
  constructor() {
    this.storage = {};
    this.front = 0;
    this.rear = 0;
  }

  size() {
    let num = 0;
    for(let i in this.storage) {
      num += 1;
    }
    return num;
  }

  enqueue(element) {
    this.storage[this.rear] = element;
    this.rear = this.size();
  }

  dequeue() {
    let data = this.storage[this.front];
    delete this.storage[this.front];
    this.front += 1;
    return data;
  }
}

Stack

stack 의 경우는 queue 와는 반대로 FILO(Fisrt In Last Out, 선입후출) 형태를 가졌으며, 가장 이해하기 쉬운 방법으로는 위에 손수 그린 그림을 참고하면 될것같다.
먼저 들어온 데이터가 먼저 나가는 민주적인 방식과 다르게, 삽입구와 사출구가 하나밖에 없는 종이컵이나 접시 디스펜서의 경우, 또는 편의점 과자매대의 과자를 채워넣는 방식 등을 생각하면 굳이 구현해 보지 않아도 기억에 오래 남을것 같다.

실생활 예제로는
위에서 기술한 편의점 등이며
컴퓨터 세계의 예제로는
함수의 호출 스택이나, 포토샵, 워드등의 프로그램에서 Redo, Undo등의 기능을 생각하면 될것같다.

클래스를 이용하여 스택의 생성, 요소의 추가, 제거, 사이즈를 반환하는 메소드를 구현하였다.

class Stack {
  constructor() {
    this.storage = {};
    this.top = 0;
  }

  size() {
    let sizeValue = 0;
    for(let i in this.storage){
      sizeValue ++;
    }
    return sizeValue;
  }

  push(element) {
    this.top = this.size();
    this.storage[this.top] = element;
  }

  pop() {
    this.top = this.size() - 1;
    let popValue = this.storage[this.top];
    delete this.storage[this.top];
    return popValue;
  }
}
profile
개발학습 일기

0개의 댓글