Description
Prerequisite: Introduction to Computer Programming
In this course, we will study a variety of data structures and algorithms that are important for the design of sophisticated computer programs, along with techniques for managing program complexity. Throughout the course, we will use Java, a strongly typed, object-oriented programming language. Topics covered will include types and polymorphism, arrays, linked lists, stacks, queues, priority queues, heaps, dictionaries, balanced trees, and graphs, as well as several important algorithms for manipulating those structures. We will also study techniques for analyzing the efficiency of algorithms. The central theme tying all of these topics together is the idea of abstraction and the related notions of information hiding and encapsulation, which we will emphasize throughout the course. Weekly lab sessions will reinforce the concepts covered in class through extensive hands-on practice at the computer.