Projects

1`
Arrays Linked Lists and Recursion
3 4 Circularly Linked Lists and List Reversal 129
3 4 1 Circularly Linked Lists 129 
3 4 2 Reversing a Linked List 133

2`
List and Iterator ADTs
6 4 Case Study: Bubble-Sort on a Sequence 259
6 4 1 The Bubble-Sort Algorithm 259
6 4 2 A Sequence-Based Analysis of Bubble-Sort 260

3`
Heaps and Priority Queues
8 3 Heap
8 3 6 Bottom-Up Heap Construction⋆ 353

4`
Heaps and Priority Queues
8 4 Adaptable Priority Queues 357
8 4 1 A List-Based Implementation 358
8 4 2 Location-Aware Entries 360

5`
Hash Tables Maps and Skip Lists
9 1 Maps 368
9 1 1 The Map ADT 369
9 1 2 A C++ Map Interface 371

6`
Hash Tables Maps and Skip Lists
9 1 3 The STL map Class 372
9 1 4 A Simple List-Based Map Implementation 374

7`
Hash Tables Maps and Skip Lists
9.2.7 A C++ Hash Table Implementation 387

8`
Hash Tables Maps and Skip Lists
9 4 Skip Lists 402
9 4 1 Search and Update Operations in a Skip List 404

9`
Sorting Sets and Selection
11 1 Merge-Sort 500
11 1 1 Divide-and-Conquer 500

10`
Sorting Sets and Selection
11 1 2 Merging Arrays and Lists 505
11 1 3 The Running Time of Merge-Sort 508
11 1 4 C++ Implementations of Merge-Sort 509

11`
Sorting Sets and Selection
11 2 Quick-Sort 513

12`
Sorting Sets and Selection
11 2 1 Randomized Quick-Sort 521
11 2 2 C++ Implementations and Optimizations 523

13`
Sorting Sets and Selection
11 3 Studying Sorting through an Algorithmic Lens 526
11 3 1 A Lower Bound for Sorting 526
11 3 2 Linear-Time Sorting: Bucket-Sort and Radix-Sort 528
Bucket-Sort

14`
Sorting Sets and Selection
11 3 Studying Sorting through an Algorithmic Lens
11 3 2 Linear-Time Sorting: Bucket-Sort and Radix-Sort 528
Radix-Sort
11 3 3 Comparing Sorting Algorithms 531

15`
Sorting Sets and Selection
11 4 Sets and Union/Find Structures 533
11 4 1 The Set ADT 533
11 4 2 Mergable Sets and the Template Method Pattern 534

16`
Sorting Sets and Selection
11 4 Sets and Union/Find Structures
11 4 3 Partitions with Union-Find Operations 538

17`
Sorting Sets and Selection
11 5 Selection 542
11 5 1 Prune-and-Search 542
11 5 2 Randomized Quick-Select 543
11 5 3 Analyzing Randomized Quick-Select 544

18`
Strings and Dynamic Programming
12 1 1 The STL String Class 555

19`
Strings and Dynamic Programming
12 2 Dynamic Programming 557
12 2 1 Matrix Chain-Product 557

20
Strings and Dynamic Programming
12 2 Dynamic Programming
12 2 2 DNA and Text Sequence Alignment 560

21
Strings and Dynamic Programming
12 3 Pattern Matching Algorithms 564
12 3 1 Brute Force 564  + implementation in C++

22`
Strings and Dynamic Programming
12 3 Pattern Matching Algorithm
12 3 2 The Boyer-Moore Algorithm 566

23`
Strings and Dynamic Programming
12 3 Pattern Matching Algorithm
12 3 3 The Knuth-Morris-Pratt Algorithm 570 Data Structures and Algorithms in C++ 2e

24`
Strings and Dynamic Programming
12 4 Text Compression and the Greedy Method 575
12 4 1 The Huffman-Coding Algorithm 576 + implementation in C++
12 4 2 The Greedy Method 577

25`
Strings and Dynamic Programming
12 5 Tries 578
12 5 1 Standard Tries 578

26`
Strings and Dynamic Programming
12 5 Tries
12 5 2 Compressed Tries 582

27`
Strings and Dynamic Programming
12 5 Tries
12 5 3 Suffix Tries 584
12 5 4 Search Engines 586

28
Memory Management and B-Trees 665
14 1 Memory Management 666
14 1 1 Memory Allocation in C++ 669
14 1 2 Garbage Collection 671

29
Memory Management and B-Trees
14 2 External Memory and Caching 673
14 2 1 The Memory Hierarchy 673
14 2 2 Caching Strategies 674

30
Memory Management and B-Trees
14 3 External Searching and B-Trees 679
14 3 1 (a,b) Trees 680
14 3 2 B-Trees 682

31`
Memory Management and B-Trees
14 4 External-Memory Sorting 683
14 4 1 Multi-Way Merging 684