DevLog__[Data Structure: Stack, Queue]

Jaewon Lee·2020년 10월 22일
1

Data Structure

목록 보기
1/3
post-thumbnail

# Intro

소프트웨어의 꽃 아닌가.... 자료 구조... 이 공부가 끝나진 않겠지만....

그래도 그래프랑 트리할때 까진 내 몸이 무사하길....

👻👻👻


1. 자료구조


1. 자료(Data)란?

  • 문자, 소리, 숫자, 그림, 영상, 단어 등의 형태로 된 의미 단위이다.
  • 자료를 의미있게 정리하면 정보가 된다. (이 말은 추천시스템을 공부하면서 뼈저리게 느낌)

2. 컴퓨터의 언어

  • 컴퓨터는 0과 1로 이러우져 있다.
  • 컴퓨터의 언어(0과 1)와 사람간의 소통을 위해 컴파일러(Compiler)라는 번역기가 생김...
    (이때부터 지옥은 열린건가...)

3. 데이터 타입

  • 기본적으로 1Byte 단위로 나누어 인간이 사용하는 여러가지 데이터들의 종류로 해석하기 위한 장치이다.
  • primitive, reference type 등등..
  • 즉, 하나의 Data를 어떻게 해석할지 정의한 것. (이것은 숫자다. 이것은 문자다. 등등등등)

4. 자료구조(Data Structure)

  • 여러 데이터들의 묶음을 어떻게 저장하고, 사용할지 정의한 것이다.
  • Array, Stack, Queue, Tree, Graph.....
  • 자료구조는 특정한 상황에 있는 문제를 해결하는데에 특화되어 있다.
  • 따라서 많이 알아두고, 특정 상황에 적합한 자료구조를 선택해 문제를 풀어내는 것이 베리베리 임포탄트


2. Stack


  • 설명 끝이다ㅎ

  • 은 오바니까 조금 설명을 붙여보면, 일단 stack은 마지막에 삽입된 항목이 가장 먼저 제거되는 후입선출 (LIFO, Last In First Out) 방식으로, 마지막에 삽입된 항목만 접근 및 제거가 가능하다.

  • 자바스크립트 배열에서는 push()와 pop() 메소드를 이용하여 스택을 구현할 수 있지만, 나는 배열 메소드를 사용하지 않고 직접 구현했으니 아래에 첨부하겠다!

  • Source Code

    class Stack {
      constructor() {
        this.storage = {};
        this.top = 0;
      }
      size() {
        return this.top;
      }
      push(...element) {
        for (let el of element) {
          this.top++;
          this.storage[`${this.top}`] = el;
        }
      }
      pop() {
        if(this.top === 0){
          return;
        }
        let output = this.storage[`${this.top}`];
        delete this.storage[`${this.top}`];
        this.top--;
        return output;
      }
    }


3. Queue


  • 먼저 삽입된 항목이 가장 먼저 제거되는 선입선출 (FIFO, First In First Out) 방식으로, 첫번째 삽입된 항목만 접근 및 제거할 수 있다.

  • 큐에 항목을 추가하는 것을 enqueue, 항목을 제거하는 것을 dequeue라고 하며, 자바스크립트 배열에서 push()와 shift() 메소드를 이용하여 큐를 구현할 수 있지만, 역시나 나는 이를 사용하지 않고 구현했다. (자랑하는게 아니다...누구나 할 수 있는...ㅠㅠ)

  • Source Code

    class Queue {
      constructor() {
        this.storage = {};
        this.front = 0;
        this.rear = 0;
      }
      size() {
        return this.rear - this.front;
      }
      enqueue(...element) {
        for (let el of element) {
          this.storage[`${this.rear}`] = el;
          this.rear++;
        }
      }
      dequeue() {
        if (this.front >= this.rear) {
          return;
        }
        else {
          let output = this.storage[`${this.front}`];
          delete this.storage[`${this.front}`];
          this.front++;
          return output;
        }
      }
    }


# Work Off


빼먹은 얘기가 있는데, 시간 복잡도 이야기를 안했다. 시간 복잡도는 필히 꼭 알아두도록 하자 나의 모교 항공대에 계신 항공대의 어머니, 한정희 교수님께서 매번, 매순간 강조하신 시간 복잡도... 이번에 자료구조를 할때는 시간 복잡도에 대해서 꼭 이해하도록 하자.

시간 복잡도가 왜 있겠는가...말 그대로 시간이 얼마나 오래걸리는지 알아보고, 줄이기 위해서 나온 개념이지 않을까 혼자 추측해 본다...우리의 일상 곳곳에서 매우 효과적인 자료구조가 쓰여, 빠른 시간안에 우리가 원하는 요청을 보여주는 것을 보면 시간 복잡도는 상품성에도 직접적으로 관련이 있다.

왜 매번 블로깅을 끝낼 때 쯤에는 할 것이 생기는 걸까...공부는 정말 끝이 없나보다...😭

이 글을 보는 사람들도 초심을 잃지 않고 같이 화이팅하길 바란다!

기본기가 탄탄한 풀스택 개발자가 되는 그날까지 🔥🔥🔥

profile
Communication : any

8개의 댓글

comment-user-thumbnail
2020년 10월 22일

와우... 이 그림이 너무 이해가 폭폭 잘되는데요! 멋있어요!

1개의 답글
comment-user-thumbnail
2020년 10월 23일

우왕.. 그림까지.. 대박..!!
잘보고 갑니당~~ ㅎㅎ

1개의 답글

우왕 화가 하셔도 되겠어요!

1개의 답글