Horowitz, Sahni, Mehta, Fundamentals of Data Structures in C++, 2nd ed., 2008, Silicon Press. Chapter 1. Basic Concepts 1.1 Overview: System Life Cycle 1.2 Object-Oriented Design 1.3 Data Abstraction and Encapsulation 1.4 Basics of C++ 1.5 Algorithm Specification 1.6 The Standard Template Library 1.7 Performance Analysis And Measurement 1.8 References And Selected Readings Chapter 2. Arrays 2.1 Abstract Data Types and the C++ Class 2.2 The Array as an Abstract Data Type 2.3 The Polynomial Abstract Data Type 2.4 Sparse Matrices 2.5 Representation of Arrays 2.6 The String Abstract Data Type 2.7 References And Selected Readings 2.8 Additional Exercises Chapter 3. Stacks and Queues 3.1 Templates in C++ 3.2 The Stack Abstract Data Type 3.3 The Queue Abstract Data Type 3.4 Subtyping and Inheritance in C++ 3.5 A Mazing Problem 3.6 Evaluation of Expressions 3.7 Additional Exercises Chapter 4. Linked Lists 4.1 Singly Linked Lists 4.2 Representing Lists in C++ 4.3 The Template Class Chain 4.4 Circular Lists 4.5 Available Space Lists 4.6 Linked Stacks and Queues 4.7 Polynomials 4.8 Equivalence Classes 4.9 Sparse Matrices 4.10 Doubly Linked Lists 4.11 Generalized Lists Chapter 5. Trees 5.1 Introduction 5.2 Binary Trees 5.3 Binary Tree Traversal and Tree Iterators 5.4 Additional Binary Tree Operations 5.5 Threaded Binary Trees 5.6 Heaps 5.7 Binary Search Trees 5.8 Selection Trees 5.9 Forests 5.10 Representation of Disjoint Sets 5.11 Counting Binary Trees 5.12 References and Selected Readings Chapter 6. Graphs 6.1 The Graph Abstract Data Type 6.2 Elementary Graph Operations 6.3 Minimum Cost Spanning Trees 6.4 Shortest Paths and Transitive Closure 6.5 Activity Networks 6.6 References and Selected Readings 6.7 Additional Exercises Chapter 7. Sorting 7.1 Motivation 7.2 Insertion Sort 7.3 Quick Sort 7.4 How Fast Can We Sort? 7.5 Merge Sort 7.6 Heap Sort 7.7 Sorting on Several Keys 7.8 List and Table Sorts 7.9 Summary of Internal Sorting 7.10 External Sorting 7.11 References and Selected Readings Chapter 8. Hashing 8.1 Introduction 8.2 Static Hashing 8.3 Dynamic Hashing 8.4 Bloom Filters 8.5 References and Selected Readings Chapter 9. Priority Queues 9.1 Single- and Double-Ended Priority Queues 9.2 Leftist Trees 9.3 Binomial Heaps 9.4 Fibonacci Heaps 9.5 Pairing Heaps 9.6 Symmetric Min-Max Heaps 9.7 Interval Heaps 9.8 References and Selected Readings Chapter 10. Efficient Binary Search Trees 10.1 Optimal Binary Search Trees 10.2 AVL Trees 10.3 Red-Black Trees 10.4 Splay Trees 10.5 References and Selected Readings Chapter 11. Multiway Search Trees 11.1 m-way Search Trees 11.2 B-Trees 11.3 B+-Trees 11.4 References and Selected Readings Chapter 12. Digital Search Structures 12.1 Digital Search Trees 12.2 Binary Tries and Patricia 12.3 Multiway Tries 12.4 Suffix Trees 12.5 Tries and Internet Packet Forwarding 12.6 References and Selected Readings