JAVA - 14 [Chapter5]

Lumi·2021년 6월 10일
0
post-thumbnail

2021.06.10
-> programmers[입문]을 통해서 복습을 한번 한다음에 이어서 학습

1강~2강 : 여러가지 자료구조

실질적으로 자료구조를 직접적으로 구현할 경험은 별로 없다.
-> 하지만 뭔지는 알아야 한다.

수업내용을 예를 들어서 적어보겠음
배열(Array)
학교에서 학생을 받으면 30명만 받겟다고 선언하는것과 같다.
-> 수량이 정해져 있다.
-> 학생이 앉을떄에는 순서대로 앞줄부터 채워서 앉는것과 같이 데이터도 차곡차고 쌓임
-> 인덱스가 나란히 있다.
-> 자료의 추가,삭제 비용이 많지만 자료를 꺼내오는것은 쉽다.

연결 리스트(LinkedList)
학교에서 학생이 들어올떄마다 다 받는것과 같다.
-> 수량이 정해져 있지 않음
-> 학생이 앉을떄에는 자기가 앉고 싶은곳에 앉는다.
-> 인덱스가 무질서하다.(1번이2번아는데 1번은 3번은 모른다.)
== 4번을 알고자 하면 1~3번까지 다 물어봐야한다는 느낌
-> 자료를 바꾸는데에는 쉽지만 위치를 찾는것은 어렵다

스택(Stack)
-> 데이터로 탑을 쌓는것과 같은 구조
-> 새롭게 추가된 자료가 1번이 된다.
-> vertical 구조
-> 가장 최근의 데이터를 꺼낼떄 많이 활용된

큐(Queue)
-> 가장 먼저 입력된 자료가 가장 먼저 출력되는 구조
-> 앞에서부터 출력된다고 생각하면됨
-> horizontal 구조
-> 자료를 넣는 것을 enqueue라고 하며, 꺼내는 것을 dequeue라고 한다.
-> array도 가능하며 linkedlist로도 가능하다.

트리(Tree)
-> 부모 노드와 자식 노드간의 연결로 이루어진 자료 구조
-> 힙, 이진트리 등등으로 있다.

  1. 이진트리
    -> 가장 많이 사용 되는 트리(1부모-2자식)

  2. 힙트리
    -> 이진트리 모양을 가진다.
    -> Max heap : 부모가 가장 크고 자식이 부모와 작거나 같은 모양
    -> Min heap : 자식이 가장 크고 부모가 자식이랑 작거나 같은 모양

  3. 이진 검색 트리
    -> 검색을 목적으로 만들어짐
    -> key값(유일한값)이 중복 되어서는 안된다.
    -> 부모노드를 중심으로 왼쪽은 작은값, 오른쪽은 큰값을 가지게 된다.
    -> 검색 속도가 빠른 편인다.

그래프(Graph)
-> 정점(vertex)와 간선(edge)로 구성
-> 그래프를 구현하는 방법 : 인접행렬, 인접 리스트
-> 그래프를 탐색하는 방법 : BFS, DFS
-> jdk에서 특별히 사용하는 알고리즘이 아니다.

해싱(Hashing)
-> 자료를 검색하기 위한 자료 구조
-> 되도록이면 유일한 인덱스를 가질수 있게 만들어야 한다.(충돌을 없애기 위해서)
-> 해시테이블, 체이닝 등등이 있다.

-- 참고자료 --
https://gitlab.com/easyspubjava/javacoursework/-/blob/master/Chapter5/5-01/README.md

profile
[기술 블로그가 아닌 하루하루 기록용 블로그]

0개의 댓글