CISC 2200: Data Structures (Fall 2020)

Instructor: Hailong Zhang

Office hours: TF 12-1 PM Eastern Time, or by appointment via private posts on Piazza, Zoom link

Lecture: TF 10:00-11:15 AM Eastern Time, JMH 330, Zoom link

Textbook: Data Structures & Algorithm Analysis, Clifford A. Shaffer, PDF link, errata link

Discussion: Piazza link



Week Date Topic Homework & Lab Project Due
1 Fri 8/28 Introduction Lab 0: g++, make, git, docker (due 9/4)
2 Tue 9/1 C++ Review HW 1: Manipulating Arrays (due 9/11)
Fri 9/4 Lab 0
3 Tue 9/8 Lists Lab 2: Array Lists (due 9/18)
Fri 9/11 HW 1
4 Tue 9/15 Linked Lists Lab 3: Linked Lists (due 9/25)
Fri 9/18 Lab 2
5 Tue 9/22 Asymptotic Analysis HW 4: Sorted Lists (due 10/2)
Fri 9/25 Lab 3
6 Tue 9/29 Stacks & Queues Lab 5: Stacks (due 10/9) Proj 1: Integers of Unlimited Size (due 11/8)
Fri 10/2 Lab 4
7 Tue 10/6 List/Queue/Stack in OS
Fri 10/9 Lab 5
8 Tue 10/13 Midterm Review (Online) Lab 6: Min Stack (due 10/23)
Fri 10/16 Midterm Exam (Online)
9 Tue 10/20 Recursion & Backtracking Lab 7: Combinations & Permutations (due 10/30)
Fri 10/23 Lab 6
10 Tue 10/27 Review
Fri 10/30 Lab 7
11 Tue 11/3 No classes: Presidential Election Lab 8: Intersection and Union of Sorted Lists (due 11/13)
Fri 11/6 More on Arrays (Online) Proj 2: Sudoku Solver (due 12/8) Proj 1
12 Tue 11/10 Binary Search Trees and B-Trees Lab 9: Binary Search Trees (due 11/20)
Fri 11/13 Lab 8
13 Tue 11/17 Priority Queues & Heaps
Fri 11/20 No classes Lab 9
14 Tue 11/24 Tree and Graph Traversals (Online) Lab 10: Graphs (due 12/4)
Fri 11/27 No Classes: Thanksgiving
15 Tue 12/1 Graph Traversal and Representations (Online)
Fri 12/4 Maps and Hashing (Online) Lab 10
16 Tue 12/8 Final Review (Online) Proj 2
Fri 12/11 Final Exam (Online)

General course information


A survey of the major types of structures in programs used to handle data, including arrays, lists, stacks, queues, trees, etc. Methods for data organization and access will be covered across data structures, and studied for their memory footprints and temporal efficiencies. This course builds on principles in discrete mathematics and in fundamental programming practices.


CISC2000/2010 Computer Science II and Lab.

Teaching mode (tentative)

The teaching will be hybrid — that is, it includes both synchronous and asynchronous instruction. Synchronous lectures will be given via Zoom for students who opt for online classes, whereas in-person lectures will be given to students who opt for face-to-face teaching. Asynchronous instruction will be in the format of pre-recorded videos. Before each scheduled lecture, readings and pre-recorded videos for the lecture will be posted on course website. Students should read and watch these materials before the lecture. The synchronous lectures will include illustration of key concepts, hands-on instruction, discussion of related topics, and Q&A. After each synchronous lecture, the screencast will be posted on course website, and if necessary, more videos will be uploaded for clarification and elaboration. All videos will include only the instructor’s picture and voice.

Depending on the feedback from students and the possible policy changes from the department/college/university, the teaching mode may be changed. The instructor will not make any changes without notifying students in advance.

Asking questions and getting help

The best ways to ask questions outside of class are on Piazza and at office hours. Unless your Piazza post needs to be private, please make the post public, since other students may be interested in the question and answer. If you prefer, you can post anonymously

To contact the instructor privately, please make a private Piazza post instead of sending email. To set up an appointment outside of office hours, create a private post to the instructor including your available times for at least three forthcoming weekdays.

Find our class Piazza link here.


There will be weekly labs, homeworks, and/or projects. Github Classroom will be used to manage all assignments, and you will use Git to turn in everything electronically. Labs will be given full credit for passing all of our autograder tests while homeworks will receive full credit for showing “reasonable effort”. Programming projects will have autograder tests and some other tests. We encourage you to write your own tests to provide a more complete test suite.

You must do all assignments individually. You may discuss with other students at a high level, but not at the level of developing algorithms or pseudocode together, and you shouldn’t develop or share any written or electronic content; any of these activities can lead to similar code. Most importantly, you must NEVER show, share, or send your code to anyone else (nor receive anyone else’s) for any reason. Official university policy will be followed in cases of academic dishonesty.

All assignments are due by 11:59:59 PM on the due day. No exceptions will be made to this deadline: if you submit at 12:00:01 AM, your submission will be considered to be late and you will receive zero points for the assignment. Please plan your time carefully and do not submit in the last minute.

There will be one midterm exam and one final exam. Both exams will be online and you should use Git to submit your answers.


The percentages given below are guidelines for both the student and instructor and may be changed as needed to reflect circumstances in the course. Any changes that occur are likely to be minor.

Class participation 5%
Labs & homeworks 55%
Projects 20%
Midterm exam 10%
Final exam 10%

Final grade is based on the course average: A: 93-100, A-: 90-92, B+: 87-89, B: 83-86, B-: 80-82, C+: 77-79, C: 73-76, C-: 70-72, D: 60-69, F: <60.



Class times and Zoom links, office hours and Zoom links, and exam days can be found in the course calendar.


The course content is partially based on materials made by Yanjun Li, Xiaolan Zhang, Clifford Shaffer, Ananth Kalyanaraman and John Foley, and those for CS 61B at UC Berkeley.