CS 310: Data Structures

(Summer 2020)


Email course staff only for logistical issues such as meeting outside of office hours, missing lecture, grading disputes, medical situations, etc. Email addresses are listed below.

BlackBoard is used for graded work submissions and to post grades.

Piazza is for announcements and discussion board. The announcements are part of the required reading. You MUST read the discussion board for clarifications and project updates. The instructor and TA can view all material on Piazza but will only answer questions on Piazza at scheduled time. Do not e-mail course staff about programming problems; use the discussion board. Do not post answers or code on the discussion board. See Honor code section below for more details.


Professor Email Office Hours Piazza Hours
Jyh-Ming Lien jmlien@cs.gmu.edu
required subject line: [CS310]
Online by Appointment Only Thusday and Thursday 9:30pm~10:30pm

TA Email Office Hours Piazza Hours
Xu Han xhan21@masonlive.gmu.edu
required subject line: [CS310]
Tuesday (12.30pm~4.30 pm) Thursday (11.00am~1pm) Monday (5~6pm) Wednesday (5~6pm) Thursday (1~2pm)


No appointments are required to attend TA's office hours.

Students must make significant, individual effort on all projects before coming to see a GTA/professor. Waiting until the last minute, in the expectations that the entire project will be explained in one office hours session, is not feasible.

Office hours are often crowded - do not rely on them for last minute help, as we cannot guarantee that we will be able to spend significant time with every student. You can also use the discussion board for posting questions.


Required: Mark Allen Weiss, Data Structures & Problem Solving Using Java, 4th ed., Addison-Wesley, 2010.

It is assumed that students read the scheduled sections prior to each lecture.


You will need a computer for this class with some modern operating system capable of running a Java compiler. Remember that lab computers will not be available on campus, but servers might be. See campus resources below.

It is not recommended to use Dr. Java for the assignments in this class as your TA will use offical Java compiler to grade your assignments. There have been issues of incompatiability in the past.

The prerequisite for this course is C or better in CS 211. I will assume that you have developed a significant degree of skill in programming (program organization, coding, documenting, testing and debugging) -- you will develop yet more this semester. I will also assume that you are acquainted with basic complexity analysis ("big O") and are able to build abstract data types using Java classes. We will only review Java in the first class to refresh your memory.


Students will:

  1. Gain an ability to analyze the runtime efficiency of algorithms that create and manipulate data structures.
  2. Gain an ability to compare data structure tradeoffs such that the student is able to choose appropriate implementations for a given data structure and appropriate data structures for a given application.
  3. Reinforce their knowledge of basic data structures (linked lists, dynamic array lists, stacks, and queues) and extend their knowledge to more sophisticated data structures, including hash tables, balanced trees, priority queues, and basic graphs.
  4. Implement and use learned data structures to solve real computing problems. This includes substantial reinforcement of language-specific techniques for abstract data types and design and debugging techniques.


This list is subject to change as interest evolves.


Graded Material Percent of Final Grade
Programming Assignments 30%
Quizzes 10%
Participation 5%
Midterm Exam 25%
Final Exam 30%


Final grades will be assigned without rounding according to the following criteria. It is a 10-point scale per letter grade, with the upper and lower 2% of each 10% earning a + or -. For example:

Letter GradeScore Required
A+98% and up
Fbelow 60%

Contesting of grades on any/all submissions must be requested within one week of the item's return. No grade changes will be considered subsequent to that deadline, or after the final exam meeting.

There will be no extra-credit assignments at the end of the semester. You will not be allowed to make-up or re-do work at the end of the semester; your grade should be a measure of your semester-long progress.


There will be one midterm exam during the regularly scheduled on June 15 during the regular lecture time and one final exam at the end of the semester on July TBA .

Early or Late/Makeup Exams require exceptional circumstances (as judged by me) and must be arranged in advance. Vacation plans are not exceptional circumstances.


Students will receive three large programming projects during the semester. These projects will be 35% of your grade - each one should take multiple sessions of coding, with questions asked in between. Don't be surprised if you're spending 20+ hours on each one. Programming projects are INDIVIDUAL work. You will not be able to pass this class by just taking exams.

All projects are to be submitted to Blackboard. You can submit your work an unlimited number of times to BlackBoard, and by default only the last version will be graded. Turning in the wrong files will likely result in a zero. You can and should download your submitted attempts to verify that you turned in a working copy.

Blackboard being unavailable is not an excuse for turning in a late assignment; in the rare situation that the website is somehow unavailable or giving the student an error, the student MUST email their submission to their GTA before the deadline, otherwise it will be considered late.

Catastrophic computer failure will not be cause for an extension. Use a backup service (such as DropBox, Bitbucket, or GitHub), email the files to yourself, storing them on a USB drive, whatever it takes. Every semester multiple students' computers die, are stolen, or otherwise 'lose' projects. Don't be the student who forgot to (frequently) back up your work! "My disk crashed" and "my roommate ate my program" will not be acceptable reasons for a late submission.

Any code turned in that does not compile, specifically on Java 1.8 is likely to receive a zero. If the grader is able to quickly fix your code, you may get some points (but you will automatically lose 10 points PER FIX). If the grader cannot immediately spot and fix the issue, the assignment will receive a zero, no exceptions.


Each student gets three Late-One-Day tokens, which are automatically used by late submissions. Turning in 1 minute late and turning in 23 hours and 59 minutes late are treated the same (no "half" tokens). Turning in a project late without a token will result in a zero. No exceptions.

You may use up to 2 late tokens on an assignment, except the final assignment.


In addition to attending the regular meeting times, you are strongly encouraged to visit the professor and teaching assistant during office hours to further your understanding of the material: we are here to help you learn.


PRIME DIRECTIVE: Be able to explain your own work including homework code and exam solutions. The work you submit should be the product of your own effort and reflect your personal understanding. Students may be asked at any time to explain code or exam solutions they submit. Inability to do so will be construed as evidence of misconduct.

Both the University and the Computer Science Department have honor codes you are expected to adhere to. We will be reviewing these in class, but more information about the university honor code can be found here: https://oai.gmu.edu/mason-honor-code/full-honor-code-document/ and the deparment's honor code can be found here: http://cs.gmu.edu/resources/honor-code/. You are bound by these honor codes.

Any submitted work which shows too much commonality with others' work to be completely original, or any plagiarized work, will result in a case for the Honors Committee. Any code which is presented in class or provided to you as part of the project may be included in your programs.

General discussion of the project (e.g. what is the project? what does X mean in the project description? etc.) is encouraged. However, programming projects are considered individual efforts, therefore no sharing of code and/or project solutions will be allowed with anyone except the TAs or the professors. Student projects will be manually and automatically assessed for cheating. You may not copy nor rewrite any other individual's code, pseudocode, or algorithms, that is not your own, including resources from Internet.

You may not use any Internet resources to create code or algorithms, besides the textbooks, the slides, and Piazza, unless otherwise specified. However, you are free to look up the syntax errors your encounter online, to gain an understanding of what the syntax error means. The projects we're doing this semester can be directly solved using techniques discussed in class, and no outside material is needed unless otherwise noted.

It is your responsibility to lock your computers with a password, to not post your code to websites like Pastebin that are publicly accessible, to guard your USB drives and computers, to not upload your files to someone else's computer, etc. You will be liable for any access gained to your code.



If you have a learning or physical difference that may affect your academic work, you will need to furnish appropriate documentation to the Disability Resource Center. If you qualify for accommodation, the DRC staff will give you a form detailing appropriate accommodations for your instructor.

In addition to providing your professors with the appropriate form, please take the initiative to discuss accommodation with them at the beginning of the semester and as needed during the term. Because of the range of learning differences, faculty members need to learn from you the most effective ways to assist you. If you have contacted the Disability Resource Center and are waiting to hear from a counselor, please tell me.