CMP 338 - Data Structures And Algorithms I
Spring 2026 Syllabus

Course Information
Course Section Lecture Hours Location
CMP 338:01-LEC - 52267 Tu & Th 10:00 am - 11:40 am Gillet Hall, Room GI 333
Contact Information
Instructor: Steven Fulakeza Email: steven.fulakeza(at)lehman.cuny.edu
Phone: NA Office Location: GI 232
Office Hours:
Instructor Availability: I respond to students' emails regularly, but please note that I do not typically check email messages during late hours on weekdays. Additionally, I do not monitor these platforms on weekends, as I reserve and dedicate this time to family, rest, and religious observances. Any messages received during these times will be addressed when I am back online.


Course Description: 4 hours, 4 credits

Abstract characterizations as well as the design and implementation of data structures such as arrays, stacks, queues, linked lists, binary search trees, heaps, hash tables and graphs along with algorithms that make use of such structures including algorithms for sorting, searching, will be studied. Algorithms will be analyzed for their asymptotic behavior in terms of time and space complexity. Implementation issues will be considered and students will write programs that embody these data structures and algorithms.

Prerequisites:

  • CMP 168 - In this course we will do extensive programming in Java. It is assumed that all students are capable of reading and writing object oriented Java code.
  • CMP 232 - In this course we will demonstrate correctness and efficiency of many of the algorithms presented via mathematical arguments and proofs. It is assumed that students are capable of following the logic of such when presented.

Pre or Corequisites

  • CMP 269

Course Objectives:

On successfully completing this course, students should be able to:

  • Improve skills in object-oriented programming
  • Improve understanding of recursive methods
  • Understand a core group of basic data structures as enumerated in topics below
  • Be able to conceptualize many programming issues at a higher level through data structures
  • Know the tradeoffs of each studied data structure so as to employ the appropriate one for a given situation
  • Be able to write parameterized data structures using generics
  • Be able to design algorithms that incorporate data structures for efficient handling of data
  • Be able to code algorithms involving data structures using an object oriented programming language
  • Be able to analyze new data structures and their algorithms for asymptotic behavior
  • Achieve a level of maturity in the subject so that further study of data structures can be pursued independently

For each algorithm, verification of its correctness and analysis of its efficiency will be considered.

Expectations:Students will be expected to do extensive programming in Java. It is assumed that at the start of this course, all students are capable of reading and writing object-oriented Java code. Students are expected to learn the material covered in class, the material in the textbook and other assigned readings. Completing homework is an essential part of the learning experience. Students should review topics from prior courses as needed using old notes and books.

Honor Code: You are encouraged to discuss the overall design of programs and homework. However, all work must be your own for all programs and homework assignments. Any sources used in the completion of your assignment must be explicitly quoted. You are responsible for knowing and following Lehman's academic integrity code (available from the Undergraduate Bulletin, Graduate Bulletin, Office of Academic Standards and Evaluations, or the Smart Catalog). All incidents of cheating will be reported to the Vice President of Student Affairs.

Communication: We will be communicating with you on a regular basis throughout the semester using Brightspace for this course. You are required to make sure that the email address on Brightspace is your current Lehman email address and you must check it on a regular basis. There will be no acceptable excuse for missing an announcement.

Grading Policy:

  • Participation & Challenge Activities From Textbook: 10%
  • Homework Problems: 25%
  • Midterm: 30%
  • Final Exam: 35%

Homework:

Programming assignments are due most weeks. Assignments and Participation Activities will be submitted via your zyBooks textbook. These programming problems reinforce concepts covered in class. To receive full credit for a program, it must be completed by the specified due date and the program must perform correctly. You will be allowed to submit your solution multiple times; the submission with the highest grade will count as your grade. All homework assignments and participation have a strict deadline, No late homework will be accepted.

Also, Participation and Challenge Activities via the online textbook zyBooks will be assigned for every topic covered in class. Your Participation Activities are submitted by answering the questions in your zyBooks as you read each chapter. Completion of these activities is expected by the specified due date.

Grading Scale:

Letter Grade Ranges%
A 93 - 100
A- 90 - <93
B+ 87 - <90
B 83 - <87
B- 80 - <83
C+ 77 - <80
C 73 - <77
C- 70 - <73
D+ 67 - <70
D 63 - <67
D- 60 - <63
F <60

Exams:

  • Midterm Exam Date: Tuesday, 03/31/2026
  • The Final Exam Date: Thursday, 05/21/2026 from 10:00 am to 12:00 pm

Final Exam Policy:

The final exam is comprehensive. If your score on the final exam is higher than your midterm exam score, the final exam score will replace the midterm exam score when calculating your final course grade. This substitution will be applied automatically during final grade calculations.

This policy does not apply to students who:

  • are found to have committed academic dishonesty on any assignment, exam, or other course-related work, or
  • did not take the midterm exam.

Note: Missed final exam = Unofficial Withdraw (WU).

Make-up and Alternate Exams Policy:

Make-up exams will not be provided unless a student's absence is due to an unavoidable circumstance. In such cases, the student must submit a formal written request along with appropriate documentation to substantiate the reason for their absence.

All exams are scheduled to be taken in person on campus. If you are unable to attend the in-person exam, please consider enrolling in the course during a subsequent semester when your schedule permits.

The last date to withdraw from a course with a W is April 13th.

Materials and Resources:

Textbook: Zybook code: CUNYCMP338FulakezaSpring2026

Suggested Additional Textbooks:

  • Data Abstraction and Problem Solving with Java: Walls and Mirrors by Frank M. Carrano and Janet J. Prichard (3rd Edition) ISBN 978-0-13-212230-6.
  • Data Structures & Algorithms by Michael T. Goodrich, Roberto Tamassia, Michael H. Goldwasser (6th Edition) ISBN 978-1-118-77133-4.
  • Data Structures and Algorithms in Java, 6th Edition Wiley ISBN: 978-1-118-77133-4

Technology:

Access to personal computers with Eclipse IDE, JDK 8

Tutoring:

Departmental tutoring is available in the Computer Science Lab in Gillet Hall, Room 222:
email: cs.lab@lehman.cuny.edu

Computer Access:

Access to a computer capable of running the necessary software packages will be required. The college has computer laboratories available with the necessary configurations. So, a part of this course will use university computer laboratories.These machines are for work related to this course only and a code of conduct applies to computer use in the department and on-campus. Misusing university computers could result in losing your computer access for the rest of the term, making it exceedingly difficult to complete this course.

Accommodating Disabilities:

Lehman College is committed to providing access to all programs and curricula to all students. Students with disabilities who may need classroom accommodations are encouraged to register with the Office of Student Disability Services. For more info, please contact the Office of Student Disability Services, Shuster Hall, Room 238, phone number, 718-960-8441.


Topics

Intro Topics:

  • Abstract Data Types (ADTs) - Specification and Implementation
  • Asymptotic Analysis and Notation: “Big-O”
  • Sorting: Merge Sort, Quick Sort, Radix Sort

Linked Lists:

  • A simple List ADT
  • Implementing a List using Linked Nodes
  • Implementing a List using an Array
  • Implementation Issues
  • The use of dummy nodes

Stacks:

  • The Stack ADT
  • Array Implementations: Fixed size and resizable.
  • Reference Based Implementation
  • Comparisons of efficiency for Array and Linked List implementations
  • Application: Evaluation of Algebraic Expressions

Queues:

  • The Queue ADT
  • Circular Array Implementation
  • Reference Based Implementation
  • Comparing Implementations: Fixed size, resizable

Binary Search Trees:

  • Definitions and Properties for Binary Tree and Binary Search Tree
  • Implementing Binary Trees using Linked Nodes
  • Implementing Binary Trees using Arrays
  • Full, Complete, Balanced Binary Trees
  • Preorder, Inorder, Postorder tree traversal
  • Using a BST to Implement Treesort
  • Additional methods for manipulating Binary Tree Data
  • Using the definitions to determine correctness of Binary Tree Algorithms

Heaps

  • Definitions of Max-Heaps and Min-Heaps
  • Implementing a Heap
  • Using a Heap to Implement Heapsort

Graphs:

  • Graph ADT and Definitions
  • Data Structures and Implementation issues for Graphs
  • Graph Traversal: Breadth First and Depth First Traversal (BFS), (DFS)
  • Greedy Algorithms
  • Shortest Path: Dijkstra’s Algorithm

Tentative Schedule:

If you will be using your personal computer, please install JDK and Eclipse.


Java Development Kit(JDK) Download and Installation:

Click here for Java SE Development Kit 8 Downloads
Download Java SE Development Kit 8. Open the downloaded file and follow the installation instructions


Eclipse Download:

Click here for Eclipse Download
Download Eclipse. Open the downloaded file and follow the installation instructions