__지은이의 말
__이 책의 구성
__학습 로드맵
Chapter 00 알아두면 쓸 데 있는 자료구조와 알고리즘
_0.1 자료구조
_0.2 알고리즘
_0.3 C 언어로 메모리를 다루는 방법
__0.3.1 포인터 복습
__0.3.2 구조체 복습
__0.3.3 메모리 레이아웃 복습
__0.3.4 스택에서 데이터를 다루는 방법
__0.3.5 힙에서 데이터를 다루는 방법
Part 01 자료구조
Chapter 01 리스트
_1.1 리스트 ADT
__1.1.1 리스트의 개념
__1.1.2 리스트와 배열 비교
_1.2 링크드 리스트
__1.2.1 링크드 리스트의 노드 표현
__1.2.2 링크드 리스트의 주요 연산
___Vitamin Quiz 1-1
__1.2.3 링크드 리스트 예제 프로그램
__1.2.4 링크드 리스트의 장단점
___Vitamin Quiz 1-2
_1.3 더블 링크드 리스트
__1.3.1 더블 링크드 리스트의 주요 연산
__1.3.2 더블 링크드 리스트 예제 프로그램
___Vitamin Quiz 1-3
_1.4 환형 링크드 리스트
__1.4.1 환형 더블 링크드 리스트의 주요 연산
__1.4.2 환형 더블 링크드 리스트 예제 프로그램
_연습문제
Chapter 02 스택
_2.1 스택 ADT
__2.1.1 스택의 개념
___Vitamin Quiz 2-1
__2.1.2 스택의 핵심 기능: 삽입과 제거 연산
_2.2 배열로 구현하는 스택
__2.2.1 배열 기반 스택과 스택의 노드 표현
__2.2.2 배열 기반 스택의 기본 연산
__2.2.3 배열 기반 스택 예제 프로그램
___Vitamin Quiz 2-2
_2.3 링크드 리스트로 구현하는 스택
__2.3.1 링크드 리스트 기반 스택과 스택의 노드 표현
__2.3.2 링크드 리스트 기반 스택의 기본 연산
__2.3.3 링크드 리스트 기반 스택 예제 프로그램
_2.4 스택의 응용: 사칙
[ Main Quest: 더 나은 개발자 되기 ]
자료구조+알고리즘, 더 나은 개발자가 되기 위한 최고의 Level Up 루트!
자료구조와 알고리즘을 배우면 좋은 개발자가 되는 데 큰 도움이 됩니다. 사실 요즘은 표준 라이브러리에서 여러 알고리즘을 기본으로 제공하고 있으므로 표준 라이브러리만 사용해도 프로그램을 만들기에는 충분합니다. 하지만 아무리 좋은 도구라도 상황에 맞지 않는다면 쓸모가 없습니다. 표준 라이브러리는 개발자에게 있어 도구함과 같습니다. 좋은 개발자라면 상황에 맞는 도구를 잘 꺼내어 쓸 줄도 알아야 합니다.
그렇다면 “상황에 맞는 자료구조와 알고리즘을 어떻게 선택할 수 있을까요?” 자료구조와 알고리즘이 어떤 원리와 구조로 작동하는지 정확하게 이해하고 있어야 합니다. 작동 원리를 알고 있으므로 이것저것 적용해 보면서 허송세월하는, “‘왜 안 되지?’의 시간”을 줄여 더 좋은 프로그램을 만드는 시간에 더 많은 시간을 투자할 수 있습니다. 심지어 문제가 발생했을 때는 상황에 맞게 알고리즘을 개선할 수도 있습니다.
하지만 자료구조와 알고리즘은 배우면 배울수록 더욱 복잡한 수식이 등장하고, 코드마저 점점 길어집니다. 개발자에게는 자료구조와 알고리즘은 레이드 퀘스트와 같습니다. 더 높은 전투력을 가지기 위해 도전하고 또 도전하지만, 클리어는 절대 만만치 않죠. 마찬가지로 더 좋은 개발자가 되기 위해서 자료구조와 알고리즘을 배워야 하지만, 끝까지 배우기는 절대 쉽지 않습니다. 어쩌면 자료구조와 알고리즘은 개발자에게 ‘최종 보스’일지도 모릅니다.
그동안 자료구조와 알고리즘을 끝까지 배우지 못했다면 그건 아직 『이것이 자료구조+알고리즘이다』를 만나지 못했기 때문일 것입니다. 재미는 학습을 계속할 큰 동력이 됩니다. 좋은 동료가 있으면 즐겁게 게임(캠핑, 등산, 운동, 독서 모임 등을 이어갈 수 있는 것처럼, 좋은 참고서가 옆에 있으면 자료구조와 알고리즘을 끝까지 즐겁게 배울 수 있습니다. 그래서 『이것이 자료구조+알고리즘이다』가 동료로 삼을 만큼