1. 배열 : 가장 기본적인 데이터 구조
=> 배열 생성 시 설정된 셀의 수가 고정, 셀에는 인덱스 번호가 부여, 인덱스를 통해 셀 내의 데이터에 접근이 가능하다.


장점 : 활용이 편함 (정렬, 탐색)
단점 : 메모리 크기가 고정, 추가 삭제 어려움
2. 스택 : 순서가 보존되는 선형 데이터 구조
=> 가장 마지막 요소(가장 최근 요소)부터 처리하는 구조

장점 : 동적 메모리 크기 (런타임이 빠르고, 데이터를 받는 순서대로 정렬)
단점 : 가장 최신 요소만 가져옴 (한번에 하나의 데이터만 처리 가능)
사용 : 브라우저 뒤로가기, 재귀
3. 큐 : 가정 먼저 입력된 요소를 처리하는 메커니즘

장점 : 동적 메모리 크기 (런타임이 빠르고, 데이터를 받는 순서대로 정렬)
단점 : 가장 오래된 요소만 가져옴 (한번에 하나의 데이터만 처리 가능)
사용: 순서에 민감한 데이터 , 캐시 구현
4. 연결리스트 : 데이터의 물리적 배치 X , index나 위치보다 참조시스템을 사용.
=> 각 요소는 노드에 저장 되며, 다음 노드 연결에 대한 정보(포인터, 주소)가 저장,

장점 : 새로운 요소 추가 및 삭제 용이, 배열처럼 연속 위치 x(대용량 처리 접합)
단점 : 배열보다 메모리 소모가 많다.
사용: 음악 플레이어, 이미지 뷰어
5. 해시 테이블 : 대량의 정보를 저장하고 특정 요소를 효율적으로 검색할 수 있는 복잡한 뎅터 구조
=> 버킷에 키(검색 시 사용되는 문자열) / 값(데이터)을 쌍으로 저장 , 메모리 크기 변경 가능
키는 미리 정의된 해시함수를 통해 해시 값을 받고 버킷을 가리킨다. 해시 숫자는 버킷의 index

장점 : 새로운 요소 추가/삭제 용이 , 검색 및 가져오기 용이
단점 : 충돌이 일어날 수 있다.
사용: 사용자 로그인 인증 , 주소 찾기, 이름 찾기
6. 그래프 : 노드 사이에 엣지가 있는 collection

장점 : 새로운 요소 추가 삭제 용이, 구조의 응용이 가능하다.
단점 : 충돌이 일어날 수 있다.
사용 : 사용자 로그인 인증
7. 트리 : 계층적 자료구조, 최상위 노드를 만들고, 자식을 추가해 간다.

- A, B, C, D 등 트리의 구성요소를 노드(node) 라고 한다.
- 위 그림의 A처럼, 트리 구조에서 최상위에 존재하는 노드를 root라고 한다.
- 루트를 기준으로, 다른 노드로의 접근하기 위한 거리를 depth 라고 한다.
- 같은 부모를 가지면서 같은 depth에 존재하는 노드들은 sibling 관계에 있다.
- 그림에서 A는 B와 C의 부모(parent) 이고, B와 C는 A의 자식(child)이다.
- 노드와 노드를 잇는 선을 edge 라고 한다.
- 자식이 없는 노드는 leaf 라고 한다.
데이터를 처리, 저장, 검색 그리고 구성하는 데 사용되는 저장소(데이터를 효율적으로 액세스하고 업데이트)

분류:
1. 선형 데이터 구조 : 순차적으로 데이터 배열, 각 요소가 인접 요소에 연결된 데이터 구조
- 정적 데이터 구조 : 메모리 크기가 고정 (엑세스가 더 쉽다.) ex)배열

- 동적 데이터 구조 : 메모리 크기가 비 고정