Advanced data structures including heaps, hash tables, height-balanced trees, and graphs. Techniques for data abstraction. Algorithms that have application in many areas of computer science including searching, sorting, and graph algorithms. Recursive algorithms. Analysis of algorithms including time and space complexity analysis. Criteria for choosing data structures and algorithms.