Students become familiar with the use and performance characteristics of common data structures including stacks, queues, lists, trees, heaps, and hash tables. The techniques of asymptotic analysis using big-O notation are introduced as a formal tool to understand how computer programs scale in resource use for increasingly large inputs. A strong emphasis is placed on developing the ability to choose the most appropriate data structures for a given computational task, and to roughly estimate the asymptotic complexity of programs with loops and nested function calls.