Primitive data types
Loops and conditionals
Arrays
Static methods
Recursion
APIs
Strings
Input and output
Binary search
Objects
Abstract data types
Implementing ADTs
Designing ADTs
APIs
Arithmetic expression evaluation
Resizing arrays
Generics
Iterators
Linked lists
Running time
Computational experiments
Tilde notation
Order-ofgrowth classifications
Amortized analysis
Memory usage
Dynamic connectivity
Quick find
Quick union
Weighted quick union
Rules of the game
Selection sort
Insertion sort
Shellsort
Abstract in-place merge
Top-down mergesort
Bottom-up mergesort
N lg N lower bound for sorting
In-place partitioning
Randomized quicksort
3-way partitioning
Priority queue API
Elementary implementations
Binary heap
Heapsort
Comparators
Stability
Median and order statistics
Symbol table API
Ordered symbol table API
Dedup
Frequency counter
Sequential search
Binary search
Basic implementation
Order-based methods
Deletion
2-3 search trees
Red-black BSTs
Deletion
Hash functions
Separate chaining
Linear probing
Set data type
Whitelist and blacklist filters
Dictionary lookup
Inverted index
File indexing
Sparse matrix-vector multiplication
Glossary
Undirected graph type
Adjacency-lists representation
Depth-first search
Breadth-first search
Connected components
Degrees of separation
Glossary
Digraph data type
Depth-first search
Directed cycle detection
Precedence-constrained scheduling
Topological sort
Strong connectivity
Kosaraju-Sharir algorithm
Transitive closure
Cut property
Greedy algorithm
Edge-weighted graph data type
Prim's algorithm
Kruskal's algorithm
Properties of shortest paths
Edge-weighted digraph data types
Generic shortest paths algorithm
Dijkstra's algorithm
Shortest paths in edgeweighted DAGs
Critical-path method
Bellman-Ford algorithm
Negative cycle detection
Arbitrage
Key-indexed counting
LSD string sort
MSD string sort
3-way string quicksort
String symbol table API
R-way tries
Ternary search tries
Characterbased operations
Brute-force algorithm
Knuth-Morris-Pratt algorithm
Boyer-Moore algorithm
Rabin-Karp fingerprint algorithm
Describing patterns with REs
Applications
Nondeterministic finite-state automata
Simulating an NFA
Building an NFA corresponding to an RE
Rules of the game
Reading and writing binary data
Limitations
Run-length coding
Huffman compression
LZW compression
Hard-disc model
Collision prediction
Collision resolution
Cost model
Search and insert
Suffix sorting
Longest repeated substring
Keyword in context
Maximum flow
Minimum cut
Ford-Fulkerson algorithm
Sorting
Shortest path
Bipartite matching
Linear programming
Longest-paths problem
P vs. NP
Boolean satisfiability
NP-completeness
Algorithms and Clients