프로그래밍은 알고리즘을 작성하고, 그에 맞는 자료구조를 선택하는 것이라 할 수 있다. 따라서 자료구조를 제대로 알고 있지 않으면 실력 있는 개발자가 되기 어려울 것이다. 개발자로서 내실을 다지기 위해 자료구조를 알아보자.
데이터를 효율적으로 다루기 위해 데이터를 조직, 관리, 저장하는 것을 말한다.
단순 (Primitive) : 기본적인 데이터 타입 int, long, float, double, char, boolean 등
복합 (Non-Primitive)
선형 (Linear): 데이터들이 선형으로 연결되어 있는 구조. 데이터 요소가 순서대로 정렬
정적 자료구조(Static Data Structure) : 크기가 고정되어 있는 자료구조
ex) 배열
동적 자료구조(Dynamic Data Structure) : 크기가 바뀔 수 있는 자료구조
ex) 연결 리스트, 큐, 스택
비선형 (Non-Linear): 계층구조나 네트워크 망과 같이 데이터 요소가 비연속적으로 연결된 구조
ex) 트리와 그래프
배열 (Array): 연속적인 메모리상에 동일한 데이터 타입의 요소를 일렬로 저장하는 자료 구조
연결 리스트(Linked List): 연결 리스트는 노드들로 연결된 자료구조. 노드는 데이터와 다음 또는 이전 노드를 가리키는 포인터를 갖는다.
큐(Queue): 먼저 추가된 데이타가 먼저 처리되는(FIFO, First In First Out) 자료 구조
스택(Stack): 가장 나중에 추가된 데이타가 먼저 처리되는(LIFO, Last In First Out) 자료 구조. 한 쪽 끝에서만 자료를 넣거나 뺄 수 있는 구조
트리(Tree): 하나의 부모 노드에 여러 개의 자식 노드들을 가지는 계층적 구조
해시테이블(Hash Table): Key - Value pair를 저장하는 자료구조. 해시 함수와 버킷 배열로 구성
그래프(Graph): 노드(꼭지점, Vertex)와 두 노드를 잇는 선(Edge)으로 구성
힙(Heap): 힙 속성(Heap Property)를 만족하는 트리 기반의 자료구조