Teaching Data Structures and Algorithms with Challenge Activities
Professor and author Michael Goldwasser details his teaching experience
In Fall 2025, zyBooks introduced 30 new Challenge Activities (CAs) to Data Structures & Algorithms in Java and in Spring 2026 zyBooks added CAs to the Python and C++ versions of Data Structures & Algorithms, as well as Algorithm Design and Applications. Dr. Michael Goldwasser shares his experience and provides suggestions for fellow instructors to maximize the student learning experience:
Most of the CAs are highly randomized exercises that present each student with a different variant of the problem. This allows each student to attempt many different variants of the same problem. For example, one CA requires the student to trace a preorder traversal of a randomly generated tree, another requires simulating the in-place partitioning step of quick-sort on randomly generated data, and a CA in the algorithms title requires students to identify an augmenting path in a flow network.
Spring Term
I had my first chance to use these CAs with my own students in Spring 2026, as part of a sophomore-level data structures class and a junior/senior-level algorithms class. With the earlier Participation Activities (PAs), I knew that students could successfully receive full credit on a reading assignment with time and effort, as a student can click through to each correct answer as part of the learning process. The challenge activities are (as aptly named) more challenging. Students are allowed an unlimited number of attempts to receive credit for a problem, but each attempt is on a newly generated variant of the problem, and so there is no way to reach a correct answer without mastering the concept.
Course approach
I use a partially flipped classroom, and so I have traditionally had a zyBooks reading assignment (with only PAs) due just before that topic is covered during a class meeting. When defining a reading assignment, the instructor has a choice of whether to require the PAs, the CAs, or both types of activities. For chapters where I felt CAs were straightforward, I tended to include them as part of the initial reading alongside the PAs with a due date prior to our classroom coverage of a topic. In other cases, I felt that a CA demanded more mastery of a topic and was better used as a separate assignment that was due after our classroom coverage.
Use Example
As an example of a straightforward CA, the section that introduces terminology for a tree data structure ends with a CA that reinforces the terminology by presenting a randomly generated tree and asking the student to identify the root, to identify the parent of a given node, or the number of children of a node. I was comfortable expecting students to be able to successfully complete that challenge based only on the reading and before further exploration in the classroom. As an example of a more complex CA, the section on flow networks in the algorithms title has a CA that asks students to identify an augmenting path given a partial flow, or to identify a maximum cut given a maximum flow. While the reading does provide coverage of those skills, I know they are more advanced, and I felt better holding those CAs back as a separate homework after working through several examples together during class time.
I’ll note that having CAs was very helpful when working with students in office hours because I could work through any number of random examples with a student while logged into my own account, before allowing them to work on their own to complete the challenge in their own account.
Moving Forward
Finally, I could use the CA when writing a test, essentially telling students that the test would include a question using the style of the CA, but with a newly generated example. Students could also revisit CAs to get additional practice when studying, as the system lets students generate extra randomizations even after they have credit for completing a challenge.
Try Challenge Activities in Data Structures and Algorithms zyBooks today!
