[TIL 15][Data Structure] Linked List, Stack, Queue

Mustache 🥸·2021년 4월 16일
0

Data Structure

목록 보기
1/6
post-thumbnail

Linked List (연결리스트)

  • 정의되지 않은 갯수의 데이터를 관리하기 위해 리스트를 사용한다.(<-> 배열)
  • 보통 데이터의 삽입과 삭제가 많이 이뤄지는 환경에서 유용함

그림 그릴때 다음 Node 주소 공간이라고 써야했는데, 데이터라고 써버렸다..

  • 연결리스트에는 단방향과 양방향이 있는데, 단방향은 위 그림처럼 자신의 한 부분은 다음 Node의 주소공간을 가지고 있고, 양방향은 이전 Node 주소공간과 다음 Node의 주소 공간을 가지고 있다.
  • 연결리스트에서 중간에 Node를 삽입 시 자신의 이전 Node가 가지고 있던 다음 Node의 주소값을 자신이 갖고 이전 Node에게는 자신의 주소값을 가지게 한다.
  • 삭제는 삽입의 역으로 삭제되는 Node의 다음 Node의 주소값을 삭제되는 Node의 이전 Node에게 전해준다.

Stack

  • 스택은 뜻 그대로 쌓는다는 개념이다.
  • 스택은 먼저 들어간 데이터가 나중에 나오는 구조이고 LIFO(Last In Last Out)라고 불린다.
  • 스택에 데이터를 삽입할 때는 push() 제거할 때는 pop()을 사용해서 처리할 수 있다.
class Stack {
    constructor(){
        this.arr = [];
        this.idx = 0;
    }
    push(value){
     	this.arr[this.idx++] = value;
    }
    pop(){
        if (this.idx === 0) return null;
        else {
            // 잘 안되서 고민중
            // 1. 데이터 하나를 추출하니 idx값이 줄어든다
            // 2. 추출 후의 arr 배열 선언?흠..
        }
    }
    peek(){
        return this.arr.slice(-1);
    }
    isEmpty(){
      	return this.arr.length === 0
    }
}
  • 스택이 지원하는 4가지 기능이 있다해서 구현해봤다
    • pop()
    • push()
    • peek(): 스택의 top에 위치하는걸 반환하는것이라고 해서 slice를 이용했는데, 저렇게 해도 될지는 모르겠네..
    • isEmpty(): 스택에 데이터가 존재하는지 여부

코드를 짜본 뒤 다른 사람들은 어떻게 짯는지 검색을 해보니까 직접 만든 pop이나 push안에 또 pop이나 push를 써서 만들었던데.. 그 메소드들을 재사용하면 직접 만든 의미가 있는건가..?

Queue

  • 큐는 양쪽이 뚫린 파이프에 데이터를 집어넣는다고 생각하면 된다.
  • 큐는 스택과 다르게 먼저 넣은 데이터가 먼저 출력이 되는 FIFO(First In First Out) 형식이다.
  • 데이터를 집어넣는 것을 enqueue, 데이터를 추출하는 것을 dequeue라고 한다.
Class Queue {
    constructor(){
        this.arr = [];
    }
    enqueue(value){
        this.arr.push(value);
    }
    dequeue(){
        this.arr.shift();
    }
}

이번엔 메소드를 사용해서 만들어보았다

출처
개념 이해: 엔지니어대한민국(유튜브)

0개의 댓글