자료구조 목차 정리 페이지다. 아래 표에서 이름에 링크가 걸린 자료구조는 상세 설명과 구현 코드를 쓴 글로 넘어간다. 지금 글이 있는 것은 배열과 동적 배열 둘뿐이고, 링크가 없는 줄은 아직 쓰지 않은 글이다. 설명 칸에 나오는 O(1) · O(log n) 같은 표기는 빅오 표기 이고, 입력이 커질 때 시간이 얼마나 늘어나는지를 나타낸다.
자료구조
선형 자료구조 (Linear Data Structures)
값을 한 줄로 늘어놓는 자료구조다. 여기서는 값들이 메모리 에 빈틈없이 붙어 있는 배열 계열을 묶었다. 같은 한 줄이라도 칸끼리 위치를 적어 이어 붙이는 쪽은 아래 「연결 자료구조」에 따로 묶었다.
자료구조 이름
설명
배열 (Array)
고정 길이 연속 메모리 블록(칸들이 메모리에 빈틈없이 붙어 있는 한 덩어리). 인덱스로 O(1) 접근.
동적 배열 (Dynamic Array)
가변 길이 배열. 미리 잡아 둔 칸 수(용량)가 다 차면 더 큰 배열을 새로 잡아 옮기는 리사이즈를 한다. 자바의 ArrayList 가 이것이다.
연결 자료구조 (Linked Data Structures)
값 하나하나(노드)가 다음 노드의 위치를 들고 줄줄이 이어진 연결 리스트 계열이다. 메모리에 붙어 있을 필요가 없다는 점이 위의 배열 계열과 다르다. 아래 「포인터」는 다음 노드를 가리키는 위치 정보를 말하고, 자바에서는 객체를 담은 변수(참조)가 이 자리다(포인터 ).
자료구조 이름
설명
단일 연결 리스트 (Singly Linked List)
한 방향 포인터로 노드 연결. 각 노드가 다음 노드만 가리킨다.
이중 연결 리스트 (Doubly Linked List)
각 노드가 다음 노드와 이전 노드를 둘 다 가리켜서 앞으로도 뒤로도 따라갈 수 있다.
원형 연결 리스트 (Circular Linked List)
마지막 노드가 첫 노드를 가리키는 순환 구조.
스택
자료구조 이름
설명
스택 (Stack)
LIFO(Last In First Out, 나중에 넣은 것을 먼저 꺼냄) 구조. 메서드를 부를 때마다 호출 기록을 쌓고 끝나면 위에서부터 걷어 내는 호출 스택, 여는 괄호를 쌓아 두었다가 닫는 괄호가 나오면 짝을 맞춰 꺼내는 괄호 짝 검사 등에 사용.
큐
트리 (Tree)
한 점(루트)에서 아래로 가지가 갈라지는 모양의 자료구조다. 점 하나를 노드, 한 노드 바로 아래에 달린 노드를 자식이라 한다. 자세한 뜻은 트리 에 있다.
그래프 (Graph)
점(노드, 정점)과 점을 잇는 선(간선)으로 관계를 나타내는 자료구조다. 자세한 뜻은 그래프 에 있다. 아래 표의 앞 두 줄은 그래프를 메모리에 담는 방법이고, 뒤 두 줄은 그래프의 종류다.
힙 (Heap)
위 트리 표의 「힙 트리」와 같은 힙 자료구조 다. JVM 의 메모리 영역인 힙 과는 이름만 같다.
자료구조 이름
설명
최소 힙 / 최대 힙
루트가 트리 전체에서 최소/최대값임을 보장. 우선순위 큐 구현.
피보나치 힙
두 힙을 하나로 합치는 연산을 효율화한 힙.
해시 기반 자료구조 (Hash-based Data Structures)
자료구조 이름
설명
해시 테이블
키를 숫자로 바꾸는 해시 함수를 이용한 평균 O(1) 탐색. 서로 다른 키가 같은 칸에 몰리면(해시 충돌 ) 느려질 수 있어 「평균」이다.
체이닝 (Chaining)
해시 충돌 시 연결 리스트로 버킷(해시 테이블의 칸) 관리. 자료구조라기보다 해시 테이블이 충돌을 처리하는 방법이다.
개방 주소법 (Open Addressing)
충돌 시 정해진 순서로 다른 버킷을 차례로 들여다보는 탐사로 빈 버킷을 찾는 방식. 이것도 충돌 처리 방법이다.
집합 및 맵 (Set & Map)
자료구조 이름
설명
HashSet / HashMap
해시 기반 집합/맵. 평균 O(1) 연산.
TreeSet / TreeMap
균형 BST 기반. 키 크기 순으로 정렬된 상태를 유지, O(log n) 연산.
Ordered Map
삽입 순서를 보존하는 맵 구현. 자바에서는 LinkedHashMap 이 기본으로 삽입 순서를 지킨다.
특수 목적 자료구조 (Specialized Data Structures)
자료구조 이름
설명
트라이 (Trie)
문자열 접두사 검색(예: 「app」으로 시작하는 단어 찾기)에 최적화된 트리.
유니온-파인드 (Disjoint Set)
집합 합치기(union)와 어떤 원소가 속한 집합 찾기(find) 연산을 거의 O(1)에 처리. 정확히는 O(1)보다 아주 조금 크지만, 실제로 다루는 어떤 크기에서도 상수처럼 작아서 「거의」다.
블룸 필터 (Bloom Filter)
확률적 집합 판단(「아마 있다」 또는 「확실히 없다」로 답함). 오탐 가능, 누락 없음 — 「아마 있다」는 틀릴 수 있지만(오탐) 「확실히 없다」는 틀리지 않는다(넣은 값을 빠뜨리는 누락이 없다).
자신만의 철학을 만들어가는 중입니다.
최상단으로 이동했습니다!
댓글남기기