About the course

This course will focus on data structures, software design, and advanced Java. The course starts off with an introduction to data structures and basics of the analysis of algorithms. Important data structures covered will include arrays, lists, stacks, queues, trees, hash maps, and graphs. The course will also focus on software design and advanced Java topics such as software architectures, design patterns, networking, multithreading, and graphics. We will use Java for the entire course.


Swapneel Sheth
swapneel [at] cis.upenn.edu


The prerequisite for this course is CIT 591 or similar.


Here's the tentative list of topics:

  • Data Structures
    • Introduction to Data Structures
    • Basics of analysis of algorithms, Space and Time Complexity
    • Arrays
    • Linked Lists
    • Recursion
    • Stacks and Queues
    • Lists and Iterators in Java
    • Maps, Dictionaries, Hashing, Sets
    • Trees
    • Graphs
  • Software Design and Advanced Java
    • Software Testing
    • Design Patterns
    • Software Architectures
    • Graphics Programming
    • Multithreading, Synchronization


The guidelines for the final grade are:

  • 48% individual assignments
  • 12% recitations
  • 20% midterm exam
  • 20% final exam


(Required) Cay Horstmann - Big Java, Early Objects (Fifth Edition)
(Recommended) Michael Goodrich, Roberto Tamassia - Data Structures and Algorithms in Java (Fifth Edition)