Contents
- 1 Introduction
- 1.1 The Need for Efficiency
- 1.2 Interfaces
- 1.3 Mathematical Background
- 1.4 The Model of Computation
- 1.5 Correctness, Time Complexity, and Space Complexity
- 1.6 Code Samples
- 1.7 List of Data Structures
- 1.8 Discussion and Exercises
- 2 Array-Based Lists
- 2.1
ArrayStack: Fast Stack Operations Using an Array - 2.2
FastArrayStack: An Optimized ArrayStack - 2.3
ArrayQueue: An Array-Based Queue - 2.4
ArrayDeque: Fast Deque Operations Using an Array - 2.5
DualArrayDeque: Building a Deque from Two Stacks - 2.6
RootishArrayStack: A Space-Efficient Array Stack - 2.7 Discussion and Exercises
- 3 Linked Lists
- 3.1
SLList: A Singly-Linked List - 3.2
DLList: A Doubly-Linked List - 3.3
SEList: A Space-Efficient Linked List - 3.4 Discussion and Exercises
- 4 Skiplists
- 4.1 The Basic Structure
- 4.2
SkiplistSSet: An EfficientSSet - 4.3
SkiplistList: An Efficient Random-AccessList - 4.4 Analysis of Skiplists
- 4.5 Discussion and Exercises
- 5 Hash Tables
- 5.1
ChainedHashTable: Hashing with Chaining - 5.2
LinearHashTable: Linear Probing - 5.3 Hash Codes
- 5.4 Discussion and Exercises
- 6 Binary Trees
- 6.1
BinaryTree: A Basic Binary Tree - 6.2
BinarySearchTree: An Unbalanced Binary Search Tree - 6.3 Discussion and Exercises
- 7 Random Binary Search Trees
- 7.1 Random Binary Search Trees
- 7.2
Treap: A Randomized Binary Search Tree - 7.3 Discussion and Exercises
- 8 Scapegoat Trees
- 9 Red-Black Trees
- 10 Heaps
- 10.1
BinaryHeap: An Implicit Binary Tree - 10.2
MeldableHeap: A Randomized Meldable Heap - 10.3 Discussion and Exercises
- 11 Sorting Algorithms
- 12 Graphs
- 12.1
AdjacencyMatrix: Representing a Graph by a Matrix - 12.2
AdjacencyLists: A Graph as a Collection of Lists - 12.3 Graph Traversal
- 12.4 Discussion and Exercises
- 13 Data Structures for Integers
- 13.1
BinaryTrie: A digital search tree - 13.2
XFastTrie: Searching in Doubly-Logarithmic Time - 13.3
YFastTrie: A Doubly-Logarithmic TimeSSet - 13.4 Discussion and Exercises
- 14 External Memory Searching