Nomad Jay
디지털노마드 Jay
Nomad Jay
전체 방문자
오늘
어제
반응형
  • 어서오세용✋ (21)
    • 삽질후기👨‍🔧(Ko) (0)
    • 온라인수업후기💻(ko) (0)
    • Programming(ko,en) (15)
      • Python (0)
      • Django (0)
      • Flask (0)
      • Javascript (12)
      • Node.js (1)
      • Nest.js🐱 (1)
      • Typescript (0)
      • DataBase🛢 (0)
      • MySQL (0)
      • MongoDB (0)
      • 리눅스 (0)
      • Basic (0)
      • Computer Science💻 (0)
      • NetWork (0)
      • SelfCodeReview (0)
      • 스티브잡생각스⚙ (0)
      • Book Review📙 (1)
      • iOS (0)
      • Andoroid (0)
    • 잡다한인생이야기🕺 (2)
    • 우당탕탕 유럽 살이 (4)
      • 여행기 (4)
      • 일기 (0)

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

인기 글

태그

  • 자바스크립트
  • 기본기
  • 모던자바스크립트딥다이브
  • 당첨수령
  • 개발기본기
  • 꼬모레이크
  • 프론트엔드
  • 유럽렌트카
  • 비전공자
  • 타입스크립트
  • 기차유럽
  • 실제유럽후기
  • 리셀후기
  • 유럽여행후기
  • 아랍항공
  • 노드
  • 밀라노
  • 개발개념
  • 꿀팁
  • 모던딥다이브
  • 스위스
  • 유럽에서기차
  • 개발자
  • 유럽여행
  • JavaScript
  • 백엔드
  • 인터라켄
  • 이탈리아
  • 개발
  • timecomplexity

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
Nomad Jay

디지털노마드 Jay

JavaScript DataStructure
Programming(ko,en)/Javascript

JavaScript DataStructure

2022. 10. 24. 00:09
반응형

자료구조(Data Structure)

데이터에 편리하게 접근하고 변경하기위해 데이터를 저장하거나 조직적으로 만드는 방법

 

(알고리즘은 저장된 데이터들을 처리하는 과정을 말한다)

http://doafco.com/wp/2019/11/07/data-structure/

1.  단순구조 (Primitive Data Structure)

- 프로그래밍에 사용되는 기본 데이터 타입

 

- JS의 원시타입에는 string, number, boolean, null, undefined  가 존재한다

 

2. 비단순 구조 (Non-Primitive Data Structure)

- 여러 데이터를 목적에 맞게 효과적으로 저장하는 자료 구조

 

- JS의 참조타입에는 object, array, function 이 존재한다

 

3. 선형 구조 (Linear Data Structure)

- 저장된 자료의 전후 관계가 1:1 인 경우

 

4. 비선형 구조 (Non-Linear Data Structure)

- 데이터 항목 사이의 관계가 1:n 인 경우

 


자바스크립트의 자료구조

 

배열 (Array)

- 배열은 대부분의 프로그래밍 언어에서, 가장 간단하고 가장 많이 쓰이는 자료구조형이다

 

- 자료들이 메모리 주소에 순서대로 차곡차곡 정렬되어있기 때문이다

 

  특정 데이터를 순차적으로 iterate 해야 하는 경우 배열은 최상의 자료구조형이다

  

  (알고리즘 문제 혹은 면접에서 string은 배열로 간주해서 풀어도 문제없다)


스택(Stack) / 큐 (Queue)

출처 : https://velog.io/@blackb0x/%EC%9E%90%EB%B0%94%EC%8A%A4%ED%81%AC%EB%A6%BD%ED%8A%B8%EC%9D%98-%EC%9E%90%EB%A3%8C%EA%B5%AC%EC%A1%B0

- 스택과 큐 모두 Linear 한 자료구조형이다 . 이 둘은 아주 유사한 자료구조이지만 , element 가 제거되는 방식에 차이가 존재

 

- 스택과 큐는 자바스크립트에 내장되어있지않아서, 사용하고 싶으면 직접 구조를 만들어내야한다

 

1. 스택 (Stack)

- 스택은 흔히들 아는 자바스크립트 엔진에서의 콜 스택이 제거되는 방식과 동일하게 동작한다

 

  마지막으로 삽입된 element 가 가장 먼저 제거되는 방식을 취한다   LIFO(Last in, First Out)

 

  따라서 스택은 브라우저 히스토리(이전 페이지, 다음 페이지) 또는 ctrl + Z 로 이전 작업을 취소하는 동작에 쓰이는 자료구조

 

- 구조를 만들때 : array 와 linked list 모두 크게 상관이 되지 않는다

 

  1. array 의 장점

 

  각 element 들이 서로 연관되어 있어서 속도가 더 빠르다]

 

  하지만 메모리 공간이 한정되어있기 때문에 할당된 메모리를 다 사용하면 현재 배열을 다른곳에 복사하기때문에 메모리를 더 사용한다

 

  2. Linked List 의 장점

 

  메모리 여기저기에 흩어져있기 때문에 상대적으로 느릴 수있지만, 메모리 공간이 한정적이지 않고 얼마든지 확장이 가능하다

 

 

2. 큐 (Queue)

- 큐는 맛잇는 음식점에 들어가려고 기다리는 대기줄이다

 

  먼저 도착한 사람이 먼저 입장하는 FIFO(First In, First Out)

 

  레스토랑 예약 앱, 예매 앱, 우버 앱 등에서 큐를 주요한 자료구조로 사용할수있다

 

- 구조를 만들때 : array 로 만드는 것을 추천하지않는다

 

 Array 의 경우 앞에서부터 element 를 제거해야하는데, 그 경우 index 를 다시 재조정해야하기때문에 시간복잡도가 O(n)이 됨

 

 따라서 Queue 는 반드시 Linked List 로 만들어야 한다

 

- 장점 : Fast Operation (removing, pushing), Fast Peek, Ordered

 

- 단점 : Slow Lookup


해시 테이블 (Hash Table)

- Hash Table 은 Key 와 Value 가 쌍을 이룬 형태로 데이터가 저장되어 있는 자료구조형을 저장한다

 

- 객체는 Hash Table 이라는 자료구조의 종류 중 하나다

 

- 배열 내 데이터도 Key 와 Value 로 이루어져있지만, 배열에서는 Key 가 오직 index, 즉 숫자만 가능한것에 비해

  Hash Table 에서는 문자열 또한 Key 가 될수있다

 

- 장점

 

  Fast Search : 배열은 전체를 순회하며 값을 찾아야하지만, 해시 테이블은 key 를 통해 바로 찾으려는 값에 접근 가능

 

  Fast Insertion and Deletion : 해시 에티블은 데이터가 정렬되어있지않기에, 바로 값을 추가하고 지울수도 있다

 

  Fast Lookup : 배열과 객체 모두 index 또는 key 를 알기에 lookup 도 굉장히 빠르다

 

- 단점 : 무작위 주소 할당으로 인한 문제 발생


연결 리스트 (Linked List)

출처:https://velog.io/@blackb0x/%EC%9E%90%EB%B0%94%EC%8A%A4%ED%81%AC%EB%A6%BD%ED%8A%B8%EC%9D%98-%EC%9E%90%EB%A3%8C%EA%B5%AC%EC%A1%B0

- Linked List 는 value 와 pointer 가 한쌍인 노드가 모여있는 자료구조형을 의미한다

 

- 위 이미지에서 푸른색 부분은 data 를 저장하고, 초록색 부분은 다음 노드를 가리키는 pointer 역할을 하는 address 부분이다

 

- Linked List에서 가장 앞 쪽 시작부분 (위 그림에서 10을 가지고있는 노드) 을 Head 가장 마지막 부분(40 노드) 를 Tail 이라한다

 

- Tail 의 pointer 는 더이상 가리킬 노드가 없기때문에 Null 을 가리킨다

 

- 장점 : Fast Insertion , Fast Deletion , Ordered, Flexible Size

 

- 단점 : Slow Lookup, More Memory


트리(Tree)

출처 : https://velog.io/@blackb0x/%EC%9E%90%EB%B0%94%EC%8A%A4%ED%81%AC%EB%A6%BD%ED%8A%B8%EC%9D%98-%EC%9E%90%EB%A3%8C%EA%B5%AC%EC%A1%B0

트리는 우리가 아는 나무를 거꾸로 뒤집은 형태, 가장 위는 뿌리 Root, 아래로 가지들이 생기면서 내려온다


그래프(Graph)

출처 : https://velog.io/@blackb0x/%EC%9E%90%EB%B0%94%EC%8A%A4%ED%81%AC%EB%A6%BD%ED%8A%B8%EC%9D%98-%EC%9E%90%EB%A3%8C%EA%B5%AC%EC%A1%B0

각 노드들이 서로 연결되어있는 자료 구조형으로 아주 커다란 자료 구조형의 범위 중 하나다

 

실제로 그래프 자료 구조 안에 Trees 자료구조가 포함되어있고, Trees 안에는 Linked List 가 포함되어 있다

 

그래프는 이들을 모두 포괄하고있는 자료 구조형이다

 

 

반응형
저작자표시 (새창열림)

'Programming(ko,en) > Javascript' 카테고리의 다른 글

Time complexity (with JS) - Part 1  (0) 2022.11.06
What is Vanilla JS?  (0) 2022.11.03
ES6 , Map(), Set()  (0) 2022.10.20
JavaScript Syntax Basics  (0) 2022.10.17
How does a browser works?  (0) 2022.10.12
    'Programming(ko,en)/Javascript' 카테고리의 다른 글
    • Time complexity (with JS) - Part 1
    • What is Vanilla JS?
    • ES6 , Map(), Set()
    • JavaScript Syntax Basics
    Nomad Jay
    Nomad Jay
    유럽에 거주중

    티스토리툴바