Stack / Queue

📅 TIL #38



🎯 Achievement Goals


  • Stack, Queue 자료구조에 대해 이해할 수 있다.
    • 알고리즘 문제에서 Stack, Queue 자료구조를 배열로 대체하여 흉내낼 수 있다.


  • 자료구조를 활용하여 알고리즘 문제에 접근할 수 있다.




👉 Stack


Stack 이란?


Data_stack


Stack은 위 사진을 보면 직관적으로 알 수 있다. 가장 나중에 들어온 데이터가 가장 먼저 나가는 구조이다.

즉, 후입선출 LIFO(Last In First Out)이라고 많이 불린다.



Stack 구현


class Stack {
  constructor() {
    this.storage = {};
    this.top = 0;   // 스택의 가장 상단을 가리킨다.
  }
  // stack 현재 데이터의 크기를 리턴
  size() {
    return this.top;
  }
  // push 구현
  push(element) {
    this.storage[this.top] = element;
    this.top += 1;
  }
  // pop 구현
  pop() {
    if (this.size() <= 0) {
      return;
    }

    const result = this.storage[this.top-1];
    delete this.storage[this.top-1];
    this.top -= 1;
    
    return result;
  }
}

const stack = new Stack();




👉 Queue


Queue 란?


Queue


queue는 먼저 들어온 데이터가 먼저 반환되는 자료구조이다.

선입선출 FIFO(First In First Out) 이라고 많이 불린다.

자료(data)를 주고 받을 때 속도의 차이시간 차이를 극복하기 위한 임시 기억 장치로 Queue가 사용된다.



Queue 구현


class Queue {
  constructor() {
    this.storage = {}
    this.front = 0;
    this.back = 0;
  }
  // queue의 현재 데이터 크기를 리턴
  size() {
    return this.back - this.front;
  }

  enqueue(element) {
    this.storage[this.back] = element;
    this.back += 1;
  }

  dequeue() {

    if (this.size() <= 0) {
      return;
    }
    const result = this.storage[this.front]
    this.storage[this.front];
    this.front += 1;

    return result;
  }
}




🙌 느낀점


평소에 프로그래머스로 알고리즘을 풀면서 많이 접했던 스택과 큐가 스프린트 과제로 주어져서 매우매우 반가웠다!! 그래서 그런지 문제들을 금방 해결할 수 있었다.

평소에 알고리즘을 조금씩이라도 풀었던 것이 이번 과제에서 많은 도움이 되었다 ㅠㅠ

하지만 기쁨도 잠시…. 내일은 그래프와 트리, 이진탐색이다…. 이 부분은 어려워서 공부를 안해본 상태라서 걱정이 크다… 오늘 미리 예습을 해놓고 내일 문제를 어떻게든 해결해 봐야겠다.




👊 내일의 TIW(today I Will)

Graph, Tree, Binary Search Algorithm