하나의 자료 뒤에 여러개의 자료가 존재할 수 있는 것
자료들 간의 앞뒤 관계가 1:n, 또는 n:n 의 관계
트리와 그래프가 대표적이며 계층적 구조를 나타내기에 적절
<-> 선형 자료구조 (Linear)
그래프는 정점(Vertex)과 그 사이를 잇는 간선(Edge)로 이루어진 자료구조
G = (V, E)는 정점의 집합 V와 간선의 집합 E라고 할 때, 그래프 G는 V와 E의 집합 (V, E)라는 뜻
V(G)는 그래프 G의 정점 집합이고, E(G)는 그래프 G의 간선 집합
간선은 (정점 v, 정점 w)형식
아래에서 설명할 트리도 그래프의 한 종류이다.
예시

용어
종류



자세한 구현 방법이나 순회 (BFS/DFS) 는 아직 이해도 잘 안가고 구현하기 힘듬
-> 일단은 "출처"를 참고하자!!
-> 코딩 테스트를 할 때 BFS/DFS가 많이 나오는 거 같은데, 아직 구현할 줄 모르니까 연습하자~
노드들이 나무 가지처럼 연결된 비선형, 계층적 자료구조로 위 그림처럼 나무를 거꾸로 뒤집어 놓은 것과 같은 모양이어서 트리(tree)라는 이름을 가지게 된 자료구조
데이터 구조의 상하 개념 계층의 구조적 속성을 표현
컴퓨터의 파일, 폴더의 계층 구조 등
용어


이진트리의 일종이며 정렬된 상태가 아니며, 완전이진트리와는 다르게 중복값이 허용
삽입/삭제는 트리 구조이기 때문에 O(logN)이므로 매우 빠름
우선순위 큐가 힙으로 많이 구현되는데, 배열과 리스트보다 효율적
종류
보통 배열을 사용하며, 0번째 인덱스는 계산을 편하게 하기위해 사용하지 않음
-> 부모노드의 인덱스가 1
모든 부모와 자식 간의 인덱스 관계는 부모:N, 왼쪽자식:2N, 오른쪽자식: 2N+1
마찬가지로 "출처"에 자세한 구현 방법과 예시 문제들이 있으니 참고하고 풀어보자~

사전과 비슷, Key와 Value라는 것을 한 쌍으로 갖는 자료형
리스트나 배열처럼 순차적으로 해당 요소 값을 구하지 않고 Key를 통해 Value를 얻음
-> 순서보다는 정의된 이름(Key)과 상응하는 데이터들을 묶기 위한 자료 구조로서 효과적
리스트와 같이 인터페이스임
Key의 중복을 허용하지 않아야 됨
종류
값을 저장하고 조회하는데 있어 가장 빠른 알고리즘
저장하고자 하는 값을 어떤 값과도 중복되지 않는 숫자 코드로 변환(이를 해시 코드라 지칭)하여 해당 코드의 메모리 위치에 값을 저장하는 방법
-> 저장하려는 값을 일련의 공식을 통해 해시코드로 변환된 값이, 저장되는 위치
값을 고유한 코드(해시코드)로 변환하여 해당 코드 위치에 값을 저장하고 조회하는 방법을 해시 테이블(=해시)이라 함
중복을 허용하지 않으며, 순서를 유지하지 않는 데이터의 집합
종류
Q: 비선형 자료구조는 어떤 특징을 가지고 있나요?
A: 비선형 자료구조는 선형 자료구조와 달리 각 요소가 일렬로 연결되어 있지 않고, 계층적인 구조나 네트워크 형태를 가지고 있습니다. 주요 특징은 다음과 같습니다.
첫째로, 계층적 구조를 가집니다. 트리(Tree)나 그래프(Graph)와 같은 비선형 자료구조는 부모와 자식 노드 간의 계층적인 구조를 갖고 있어서 데이터를 효과적으로 구조화할 수 있습니다.
둘째로, 순서가 정해져 있지 않습니다. 선형 자료구조와는 달리 요소들 간에 명시적인 순서가 정해져 있지 않아서 자유롭게 관계를 형성할 수 있습니다.
셋째로, 루프(loop)가 발생할 수 있습니다. 그래프와 같은 비선형 자료구조는 순환 구조를 가질 수 있어서 자기 참조적인 관계를 형성할 수 있습니다.
넷째로, 메모리 관리가 중요합니다. 비선형 자료구조는 동적인 크기를 가질 수 있고, 메모리의 효율적인 관리가 필요합니다.
이러한 특징들을 고려하여, 데이터 간의 복잡한 관계를 표현하고 다양한 상황에 유연하게 대응할 수 있는 자료구조를 선택하는 데 사용됩니다.
Q: 트리와 그래프의 차이가 무엇인지 설명해 주세요.
A: 트리와 그래프는 둘 다 비선형 자료구조로서 계층적인 구조를 가지고 있지만, 몇 가지 중요한 차이점이 있습니다.
첫째로, 계층 구조의 정의입니다. 트리는 각 노드가 하나의 부모 노드를 가지며, 최상위 노드를 제외한 모든 노드는 하나의 부모 노드와 연결돼 있습니다. 반면에 그래프는 각 노드가 임의의 다른 노드와 연결될 수 있습니다.
둘째로, 순환 구조의 허용 여부입니다. 트리는 순환 구조를 허용하지 않습니다. 각 노드 간의 연결이 사이클을 형성하지 않아야 합니다. 그러나 그래프는 순환을 가질 수 있습니다.
셋째로, 루트 노드와 부모-자식 관계의 유무입니다. 트리는 항상 하나의 루트 노드를 가지며, 각 노드는 부모와 자식 노드 간의 관계를 가집니다. 반면에 그래프는 루트 노드를 갖지 않을 수도 있으며, 부모-자식 관계가 없을 수도 있습니다.
넷째로, 방향성의 존재 여부입니다. 트리는 일방향적인 구조로서 각 간선이 한 방향으로만 이동합니다. 반면에 그래프는 간선에 방향이 없는 무방향 그래프와 간선에 방향이 있는 방향 그래프로 나뉩니다.
이러한 차이점을 고려하면, 트리는 주로 계층적인 데이터를 표현하고 구조화하는 데 사용되며, 그래프는 다양한 관계를 모델링하고 복잡한 네트워크를 표현하는 데 사용됩니다.
선형/비선형
자료구조 - 그래프
트리, 이진 트리
힙 개념과 JAVA로 구현
MAP의 자료구조
자료구조(MAP)
자료구조 - set 개념 및 활용
맵 & 셋