part1. 자료구조
1장. 리스트
-
링크드 리스트
배열 유감
링크드 리스트를 소개합니다
C 언어로 표현하는 링크드 리스트의 노드
링크드 리스트의 주요 연산
링크드 리스트 예제 프로그램
링크드 리스트의 뒷이야기
-
더블 링크드 리스트
더블 링크드 리스트를 소개합니다
더블 링크드 리스트의 주요 연산
더블 링크드 리스트 예제 프로그램
-
환형 링크드 리스트
리스트 세계와 우로보로스, 환형 링크드 리스트
환형 더블 링크드 리스트의 주요 연산
환형 더블 리읔드 리스트 예제 프로그램
2장. 스택
- 스택 주차장의 추억
- 스택의 주요 기능 : 삽입과 제거
-
배열로 구현하는 스택
스택과 스택의 노드 표현하기
스택의 기본 연산 구현하기
배열로 구현하는 스택 예제 프로그램
-
링크드 리스트로 구현하는 스택
스택과 스택의 노드 표현하기
스택의 기본 연산 구현하기
링크드 리스트로 구현하는 스택 예제 프로그램
-
스택의 응용 : 사칙 연산 계산기
수식의 중위 표기법과 후위 표기법
후위 표기식을 계산하는 알고리즘
사칙 연산 계산기 예제 프로그램
이것만을 알고 갑시다
3장. 큐
- 큐
- 큐의 주요 기능: 삽입과 제거
-
끝은 새로운 시작이다: 순환 큐
순환 큐를 소개합니다.
비어 있거나 또는 가득 차 있거나
순환 큐 구현하기
순환 큐 예제 프로그램
-
링크드 큐
순환 큐 vs 링크드 큐
링크드 큐 구현하기
링크드 큐 예제 프로그램
이것만은 알고 갑시다
4장. 트리
-
트리기초 다지기
트리를 소개합니다
트리를 열어봅시다
트리 표현하기
노드 표현하기
트리 구현하기
-
이진 트리
누구냐, 넌!
이진 트리의 여러 형태
이진 트리의 순회
이진 트리 구현하기
-
수식 트리
수식 트리를 소개합니다
수식 트리의 구축
수식 트리의 구현
-
분리 집합
분리 집합: 교집합을 갖지 않는 집합들
분리 집합의 표현
분리 집합의 연산
분리 집합 예제 프로그램
이것만은 알고 갑시다
part2 알고리즘
5장. 정렬
- 콩쥐의 해결책: 정렬 알고리즘
-
버블 정렬
버블 정렬을 소개합니다
버블 정렬은 얼마나 빠를까요?
거품을 내는 코드를 작성해 봅시다
-
삽입 정렬
삽입 정렬은 무엇인가요?
삽입 정렬은 버블 정렬보다 빠를까요?
삽입 정렬 예제
-
퀵 정렬
빠른 정렬, 퀵 정렬
퀵 정렬이 퀵 정렬을 호출합니다
퀵 정렬은 빠릅니다!
-
C 표준 라이브러리 퀵 정렬 함수
qsort() 함수를 소개합니다
qsort() 함수를 테스트 해봅시다
콩쥐가 되어 보세요
이것만은 알고 갑시다
6장. 탐색
- 데이터를 찾아서
-
순차 탐색
자기 구성 순차 탐색
-
이진 탐색
탐색 익스프레스: 이진 탐색
이진 탐색의 성능 측정
이진 탐색의 구현
C 표준 라이브러리의 이진 탐색 함수 : bsearch()
-
이진 탐색 트리
이진 탐색을 위한 이진 트리
이진 탐색 트리는 어떻게 생겼을까?
이진 탐색 트리의 기본 연산
이진 탐색 트리 예제 프로그램
뒤늦게 생각해보는 이진 탐색 트리의 문제점
-
레드 블랙 트리
레드 블랙 트리가 균현을 유지하는 비결
레드 블랙 트리의 기본 연산
레드 블랙 트리 예제 프로그램
이것만은 알고 갑시다
7장. 우선순위 큐와 힙
-
우선순위 큐
우선순위 큐의 삽입 연산
우선순위 큐의 제거 연산
우선순위 큐의 구현
-
힙
힙에 새 노드 삽입하기
힙의 최소값 삭제
힙의 구현
힙 예제 프로그램
-
힙을 이용한 우선순위 큐의 구현
이것만은 알고 갑시다
8장. 해시 테이블
- 해시에 대하여
- 해시 테이블: 공간을 팔아 시간을 사다
-
해시 함수
나눗셈법
나눗셈법 예제 프록램
자릿수 접기
해시 함수의 한계: 충돌
-
충돌 해결하기
체이닝
개방 주소법
이것만은 알고 갑시다
9장. 그래프
-
그래프를 소개합니다
오일러의 도구
그래프의 정의
-
그래프를 어떻게 표현할 것인가?
인접 행렬
인접 리스트
인접 행렬 vs 인접 리스트
인접 리스트의 구현
인접 리스트 예제 프로그램
-
그래프 순회 : 그래프를 따라 산책하기
깊이 우선 탐색
너비 우선 탐색
그래프 순회 예제 프로그램
-
위상 정렬
위상 정렬 예제 프로그램
-
최소 신장 트리
프림 알고리즘
크루스칼 알고리즘
최소 신장 트리 예제 프로그램
-
최단 경로 탐색
다익스트라 알고리즘
다익스트라 알고리즘 예제 프로그램
10장. 문자열 검색
-
고지식한 검색
고지식하거나 미련하거나
고지식한 검색의 구현
-
카프-라빈 알고리즘
해시 값을 활용한 문자열 검색
카프-라빈 알고리즘의 구현
-
KMP 알고리즘
접두부, 접미부, 그리고 경계
경계 정보를 미리 계산하기
KMP 알고리즘의 구현
-
보이어-무어 알고리즘
나쁜 문자 이동
착한 접미부 이동
보이어-무어 알고리즘의 전처리 과정
이것만은 알고 갑시다
part3 알고리즘 설계 기법
11장. 알고리즘 성능 분석
- 알고리즘의 성능에 대하여
- 알고리즘 수행 시간의 분석
-
점근 표기법
O 표기법
Ω 표기법
θ 표기법
-
재귀 알고리즘의 성능 분석
재귀 방정식과 재귀 알고리즘
마스터 정리
이것만은 알고 갑시다
12장. 분할 정복
- 아우스터리츠 전투
- 분할 정복 알고리즘
-
분할 정복의 응용
병합 정렬
거듭 제곱
피보나치 수
이것만은 알고 갑시다
13장. 동적 계획법
- 동적 계획법이란
-
피보나치 수 구하기
동적 계획법으로 피보나치 수 구하기
동적 계획법으로 설계된 피보나치 수 알고리즘의 구현
-
최장 공통 부분 순서
최장 공통 부분 순서란
LCS 알고리즘
동적 계획법으로 설계하는 LCS 알고리즘
이것만은 알고 갑시다
14장. 탐욕 알고리즘
- 탐욕 알고리즘에 대하여
-
편의점 점원의 거스름돈 줄이기
거스름돈 계산 프로그램
거스름돈을 만드는 탐욕 알고리즘은 항상 최적일까?
- 크루스칼의 최소 신장 트리 알고리즘 다시 보기
- 다익스트라의 최단 경로 알고리즘 다시 보기
-
허프만 코딩을 이용한 데이터 압축
고정 길이 코드와 접두어 코드
허프만 코딩
허프만 코딩의 구현
이것만은 알고 갑시다
15장. 백트래킹
- 백트래킹을 소개합니다
-
미로 탈출로 찾기
트리 대신 재귀 호출로 구현하는 백트래킹
미로 탈출 알고리즘 구현하기
-
8개의 쿤
8개의 퀸이 만드는 해공간과 백트래킹
8개의 퀸 알고리즘 구현하기
이것만은 알고 갑시다