C++로 구현한 자료구조, 알고리즘, C++ 기초 문법 예제 모음입니다. 각 예제는 템플릿(template<typename T>)으로 작성되어 다양한 타입에 활용할 수 있으며, 한국어 주석으로 학습에 최적화되어 있습니다.
- 연결 리스트 (Linked List)
- 이중 연결 리스트 (Doubly Linked List)
- 스택 (Stack)
- 큐 (Queue)
- 원형 큐 (Circular Queue)
- 양방향 큐 (Deque)
- 이진 탐색 트리 (Binary Search Tree)
- 힙 (Heap)
- 해시 테이블 (Hash Table)
- 그래프 (Graph)
- 트라이 (Trie)
- 쿼드트리 (Quad Tree)
- 포인터 (Pointers)
- 스마트 포인터 (Smart Pointers)
- 템플릿 (Templates)
- 객체지향 프로그래밍 (OOP)
- STL 기초 (STL Basics)
- 파일 입출력 (File I/O)
- 예외 처리 (Exception Handling)
- 람다 표현식 (Lambda)
- 이동 시맨틱 (Move Semantics)
경로: linked_list/
단방향 연결 리스트(Singly Linked List)입니다.
head → [1] → [2] → [3] → NULL
g++ -std=c++17 linked_list/main.cpp -o ll && ./ll경로: doubly_linked_list/
각 노드가 이전/다음 양쪽 방향 포인터를 가지는 연결 리스트입니다. pop_back이 O(1)입니다.
NULL ← [0] ⇄ [1] ⇄ [2] ⇄ [3] → NULL
g++ -std=c++17 doubly_linked_list/main.cpp -o dll && ./dll경로: stack/
배열 기반 스택입니다. LIFO(Last In, First Out) 구조로, 용량이 가득 차면 자동으로 2배 확장됩니다.
push → [top] 3 | 2 | 1 [bottom] → pop
g++ -std=c++17 stack/main.cpp -o stack && ./stack경로: queue/
원형 배열(Circular Array) 기반 큐입니다. FIFO(First In, First Out) 구조입니다.
enqueue → [front] 1 | 2 | 3 [back] → dequeue
g++ -std=c++17 queue/main.cpp -o queue && ./queue경로: circular_queue/
배열 기반 원형 큐입니다. 나머지 연산으로 인덱스를 원형으로 관리합니다.
g++ -std=c++17 circular_queue/main.cpp -o cq && ./cq경로: deque/
앞과 뒤 양쪽에서 O(1) 삽입/삭제가 가능한 자료구조입니다.
push_front → [1] | [2] | [3] ← push_back
g++ -std=c++17 deque/main.cpp -o deque && ./deque경로: binary_tree/
왼쪽 < 루트 < 오른쪽 속성을 유지하는 이진 트리입니다. 삽입/탐색/삭제 및 4가지 순회를 지원합니다.
5
/ \
3 7
/ \ / \
1 4 6 9
g++ -std=c++17 binary_tree/main.cpp -o bst && ./bst경로: heap/
최대 힙/최소 힙 구현과 STL priority_queue 사용 예시를 포함합니다.
g++ -std=c++17 heap/main.cpp -o heap && ./heap경로: hash_table/
체이닝과 오픈 어드레싱(선형 탐사) 두 가지 충돌 처리 방식을 구현합니다.
g++ -std=c++17 hash_table/main.cpp -o ht && ./ht경로: graph/
인접 행렬과 인접 리스트 두 가지 표현 방식을 구현합니다.
g++ -std=c++17 graph/main.cpp -o graph && ./graph경로: trie/
문자열 탐색에 특화된 트리입니다. 자동완성, 접두사 탐색 기능을 포함합니다.
g++ -std=c++17 trie/main.cpp -o trie && ./trie경로: quad_tree/
2D 공간 분할에 사용되는 쿼드트리입니다.
g++ -std=c++17 quad_tree/main.cpp -o quad_tree && ./quad_tree경로: sorting/
| 파일 | 알고리즘 | 시간 복잡도 |
|---|---|---|
bubble_sort.cpp |
버블 정렬 | O(n2) |
selection_sort.cpp |
선택 정렬 | O(n2) |
insertion_sort.cpp |
삽입 정렬 | O(n2) / O(n) 최선 |
merge_sort.cpp |
합병 정렬 | O(n log n) |
quick_sort.cpp |
퀵 정렬 | O(n log n) 평균 |
g++ -std=c++17 sorting/bubble_sort.cpp -o bubble && ./bubble g++ -std=c++17 sorting/merge_sort.cpp -o merge && ./merge g++ -std=c++17 sorting/quick_sort.cpp -o quick && ./quick
경로: searching/
| 파일 | 알고리즘 | 시간 복잡도 |
|---|---|---|
linear_search.cpp |
선형 탐색 | O(n) |
binary_search.cpp |
이진 탐색 (반복/재귀, lower/upper bound) | O(log n) |
g++ -std=c++17 searching/binary_search.cpp -o binary && ./binary경로: bfs_dfs/
| 파일 | 내용 |
|---|---|
bfs.cpp |
너비 우선 탐색, 최단 거리 계산 |
dfs.cpp |
깊이 우선 탐색 (재귀/반복), 연결 요소 개수 |
g++ -std=c++17 bfs_dfs/bfs.cpp -o bfs && ./bfs g++ -std=c++17 bfs_dfs/dfs.cpp -o dfs && ./dfs
경로: recursion/
| 파일 | 내용 |
|---|---|
fibonacci.cpp |
피보나치 (순수 재귀, 메모이제이션, 반복) |
factorial.cpp |
팩토리얼 (재귀, 반복, 꼬리 재귀) |
hanoi.cpp |
하노이 탑 |
g++ -std=c++17 recursion/hanoi.cpp -o hanoi && ./hanoi경로: dynamic_programming/
| 파일 | 내용 |
|---|---|
memoization.cpp |
메모이제이션 (하향식 DP) |
tabulation.cpp |
타뷸레이션 (상향식 DP), LIS, 동전 교환 |
lcs.cpp |
최장 공통 부분 수열 (LCS) |
knapsack.cpp |
0/1 배낭 문제 |
g++ -std=c++17 dynamic_programming/knapsack.cpp -o knapsack && ./knapsack경로: pointers/
기본 포인터, 포인터 산술, 이중 포인터, const 포인터, 함수 포인터를 다룹니다.
g++ -std=c++17 pointers/pointers.cpp -o pointers && ./pointers경로: smart_pointers/
unique_ptr, shared_ptr, weak_ptr의 사용법과 순환 참조 방지를 설명합니다.
g++ -std=c++17 smart_pointers/smart_pointers.cpp -o smart_ptr && ./smart_ptr경로: templates/
함수 템플릿, 클래스 템플릿, 비타입 템플릿 매개변수, 템플릿 특수화를 다룹니다.
g++ -std=c++17 templates/templates.cpp -o templates && ./templates경로: oop/
클래스, 상속, 다형성, 가상 함수, 순수 가상 함수, 연산자 오버로딩을 다룹니다.
g++ -std=c++17 oop/oop.cpp -o oop && ./oop경로: stl_basics/
vector, map, set, unordered_map과 STL 알고리즘(sort, find, transform 등)을 다룹니다.
g++ -std=c++17 stl_basics/stl_basics.cpp -o stl && ./stl경로: file_io/
텍스트 파일 읽기/쓰기/추가, CSV 파싱, 이진 파일 입출력을 다룹니다.
g++ -std=c++17 file_io/file_io.cpp -o file_io && ./file_io경로: exception_handling/
표준 예외, 사용자 정의 예외, 다중 catch, RAII finally 패턴을 다룹니다.
g++ -std=c++17 exception_handling/exception_handling.cpp -o exception && ./exception경로: lambda/
람다 기본 문법, 캡처 방식, std::function, std::bind, STL과의 활용을 다룹니다.
g++ -std=c++17 lambda/lambda.cpp -o lambda && ./lambda경로: move_semantics/
lvalue/rvalue 참조, std::move, 이동 생성자/대입 연산자, std::forward를 다룹니다.
g++ -std=c++17 move_semantics/move_semantics.cpp -o move && ./moveProgramming_Language/
├── 📦 자료구조
│ ├── linked_list/ # 단방향 연결 리스트
│ ├── doubly_linked_list/ # 이중 연결 리스트
│ ├── stack/ # 스택 (배열 기반)
│ ├── queue/ # 큐 (원형 배열)
│ ├── circular_queue/ # 원형 큐
│ ├── deque/ # 양방향 큐
│ ├── binary_tree/ # 이진 탐색 트리
│ ├── heap/ # 최대/최소 힙
│ ├── hash_table/ # 해시 테이블 (체이닝, 오픈 어드레싱)
│ ├── graph/ # 그래프 (인접 행렬/리스트)
│ ├── trie/ # 트라이
│ └── quad_tree/ # 쿼드트리
├── 🔍 알고리즘
│ ├── sorting/ # 정렬 알고리즘 5종
│ ├── searching/ # 선형/이진 탐색
│ ├── bfs_dfs/ # BFS, DFS
│ ├── recursion/ # 재귀 예제
│ └── dynamic_programming/ # DP 예제
└── 📚 C++ 기초 문법
├── pointers/ # 포인터
├── smart_pointers/ # 스마트 포인터
├── templates/ # 템플릿
├── oop/ # 객체지향 프로그래밍
├── stl_basics/ # STL 기초
├── file_io/ # 파일 입출력
├── exception_handling/ # 예외 처리
├── lambda/ # 람다 표현식
└── move_semantics/ # 이동 시맨틱
- C++17 이상
- g++ 또는 clang++