1 Introduction 1
1.1. What's the Book About? 1
1.2. A Brief Introduction to Recursion 3
Summary 7
Exercises 7
References 8
2 Algorithm Analysis 9
2.1. Mathematical Background 9
2.2. Model 12
2.3. What to Analyze 12
2.4. Running Time Calculations 14
2.4.1. A Simple Example 15
2.4.2. General Rules 15
2.4.3. Solutions for the Maximum Subsequence Sum Problem 18
2.4.4. Logarithms in the Running Time 22
2.4.5. Checking Your Analysis 27
2.4.6. A Grain of Salt 27
Summary 28
Exercises 29
References 33
3 Lists, Stacks, and Queues 35
3.1. Abstract Data Types (ADTs) 35
3.2. The List AnT 36
3.2.1. Simple Array Implementation of Lists 37
3.2.2. Linked Lists 37
3.2.3. Programming Details 38
3.2.4. Common Errors 43
3.2.5. Doubly Linked Lists 45
3.2.6. Circularly Linked Lists 46
3.2.7. Examples 46
3.2.8. Cursor Implementation of Linked Lists 50
3.3. The Stack ADT 56
3.3.1. Stack Model 56
3.3.2. Implementation of Stacks 57
3.3.3. Applications 65
3.4. The Queue AnT 73
3.4.1. Queue Model 73
3.4.2. Array Implementation of Queues 73
3.4.3. Applications of Queues 78
Summary 79
Exercises 79
4 Trees 83
4.1. Preliminaries 83
4.1.1. Terminology 83
4.1.2. Tree Traversals with an Application 84
4.2. Binary Trees