Sketch of various abstract data structures and their Java API implementation

Instructors: R. Jordan Crouser and Nicholas R. Howe

Course Meets: MWF 9:25AM - 10:40AM EST

Location: Seelye 106

Jordan's Office Hours: Tuesdays 9AM - 10:30AM EST and Wednesdays 1PM-2:30PM EST in Bass 105/107

Nick's Office Hours: Mondays 11AM-12PM EST, Thursdays 2:30PM-3:30PM EST, and by appointment in Ford 354

TA Hours: Sundays 1-3pm EST, Sundays through Thursdays 7-9pm EST in Ford Hall


Course Description:

In this course, we will explore elementary data structures (linked lists, stacks, queues, trees, graphs) and algorithms (searching, sorting) in a variety of contexts, including event-driven applications with a graphical user interface. This course emphasizes object-oriented programming throughout, using the Java programming language. Prerequisites: CSC111.


Learning Goals:

This course is designed to help you develop a robust toolbox for solving computational problems, and to approach programming with flexibility and resilience. We organize this study around three main themes. Upon successful completion of this course, students will be able to:

Theme 1: Knowledge of Data Structures and Abstractions

  • Describe fundamental data structures in terms of their use: the operations they support and the associated conceptual model.
  • Map abstract data types to potential implementations, both concrete and abstract.
  • Reason about strengths and weaknesses of a particular implementation.

Theme 2: Application of Data Structures

  • Solve problems computationally through the application of fundamental data structures and algorithms.
  • Choose an appropriate data structure for a given task and justify the choice (considering constraints including time, space, etc.).
  • Compare multiple proposed solutions to a given problem and evaluate their relative merits.

Theme 3: Algorithms and Programming

  • Write clear, well-documented, and effective programs using techniques such as recursion, object-oriented design, and functional programming.
  • Demonstrate comprehension of written code (e.g. tracing execution, debugging, etc.).
  • Implement a variety of algorithms for solving computational problems (e.g. sorting, search, etc.), and articulate the pros and cons of different methods.