| 분류 | 구조 | 예시 |
|---|---|---|
| 선형 | 일대일 관계 | 배열, 연결 리스트, 스택, 큐 |
| 비선형 | 일대다 관계 | 트리(Tree), 그래프(Graph) |
"1인 1실 고정 방 예약제"
예: 3명 예약 시 301호~303호를 고정으로 계약
std::vector)실제 필요한 크기보다 1.5~2배 더 크게 예약
→ 이사(복사) 횟수 최소화
"3명 예약했지만, 2명 더 올 걸 대비해 5개 방 예약"
이사할 필요가 없도록 넉넉하게 잡아둠
push_back 등)"301호, 405호, 507호를 예약하고, 각 방에 다음 방 번호 메모만 적어두는 구조"
iterator 사용)| 항목 | 배열 | 동적 배열 | 연결 리스트 |
|---|---|---|---|
| 메모리 | 연속 | 연속 | 비연속 |
| 크기 | 고정 | 유동적 | 유동적 |
| 접근 속도 | 빠름 (O(1)) | 빠름 (O(1)) | 느림 (O(n)) |
| 중간 삽입/삭제 | 느림 (O(n)) | 느림 (O(n)) | 빠름 (O(1), 위치 알고 있어야 함) |
| 장점 | 빠른 접근 | 유연한 크기 | 삽입/삭제 용이 |
| 단점 | 크기 제한 | 중간 수정 느림 | 느린 임의 접근 |
std::vector(동적 배열) 사용배열 vs 벡터 vs 연결 리스트 차이 설명 + 예시 & 시간복잡도
N번째 데이터에 직접 접근 가능한지 여부
| 자료구조 | 지원 여부 | 비고 |
|---|---|---|
| 배열 | ✅ | arr[5] 가능 |
| 동적 배열 | ✅ | vec[5] 가능 |
| 연결 리스트 | ❌ | n번째 노드까지 순회 필요 |
| 자료구조 | 메모리 구조 |
|---|---|
| 배열 | [301][302][303][304][305] |
| 동적 배열 | [301][302][303][(빈)][(빈)] → 확장 가능 |
| 연결 리스트 | [301] → [405] → [507] (포인터 연결) |
| 트리 | [Root] / \ [L] [R] |
| 그래프 | Node들 간 자유 연결 |