A second-level course in programming that focuses on classic data structures and their associated algorithms. Students will learn how the organization of data within a program affects the efficiency of the program, and how algorithms and data structures can work together to support the most efficient code for the particular problem being solved. Students will put these tools to practice in order to create robust, interesting software applications.