Part I: Data Structures Chapter 1. Introduction to Data Structures . 1 Right Tool for the Right Job . 2 Back to Data Structures . 5 Conclusion . 6 Chapter 2. Big-O Notation and Complexity Analysis . 7 It''s Example Time .
8 It''s Big-O Notation Time! .11 Conclusion .15 Chapter 3. Arrays . 17 What Is an Array? .18 Array Implementation / Use Cases .24 Arrays and Memory .26 Performance Considerations .
30 Conclusion .32 Chapter 4. Linked Lists . 35 Meet the Linked List .36 Linked List: Time and Space Complexity .40 Linked List Variations .41 Implementation .44 Conclusion .
52 Chapter 5. Stacks . 53 Meet the Stack .54 A JavaScript Implementation .56 Stacks: Time and Space Complexity .58 Conclusion .59 Chapter 6. Queues .
61 Meet the Queue .62 A JavaScript Implementation .64 Queues: Time and Space Complexity .66 Conclusion .67 Chapter 7. Trees . 69 Trees 101 .70 Height and Depth .
75 Conclusion .77 Chapter 8. Binary Trees . 79 Meet the Binary Tree .80 A Simple Binary Tree Implementation .86 Conclusion .89 Chapter 9. Binary Search Trees .
91 It''s Just a Data Structure .93 Implementing a Binary Search Tree .103 Performance and Memory Characteristics .110 Conclusion .112 Chapter 10. Heaps . 113 Meet the Heap .114 Heap Implementation .
126 Performance Characteristics .132 Conclusion .134 Chapter 11. Hashtable (aka Hashmap or Dictionary) . 137 A Very Efficient Robot .138 From Robots to Hashing Functions .142 From Hashing Functions to Hashtables .145 JavaScript Implementation/Usage .
148 Dealing with Collisions .150 Performance and Memory .151 Conclusion .153 Chapter 12. Trie (aka Prefix Tree) . 155 What Is a Trie? .156 Diving Deeper into Tries .167 Many More Examples Abound! .
172 Implementation Time .173 Performance .179 Conclusion .181 Chapter 13. Graphs . 183 What Is a Graph? .184 Graph Implementation .190 Conclusion .
196 Part II: Algorithms Chapter 14. Introduction to Recursion .