Prerequisite(s): CSIT 111 or CSIT 114 with a grade of C- or higher; and CSIT 170 with a grade of C- or higher; and MATH 122 or AMAT 120 with a grade of C- or higher. This course discusses the design and implementation of main-stream data structures and algorithms. The topics covered in this course include but are not limited to sorting algorithms, complexity analysis, elementary data structures (stacks, queues, linked lists), dynamic programming, advanced data structures (B-trees, Fibonacci Heaps), and graph algorithms. The lectures focus on the design, implementation and analysis of these algorithms. The assignments and in-class labs are designed to improve the understanding of algorithm design, and get students familiar with programming in Java. In general, concepts and design principles is educated through lectures. Meanwhile, practical programming skills are taught through assignments, lab and course project. Meets the Graduation Writing Requirement for majors in Computer Science and Data Science.