CompSci 351: Data Structures & Algorithms--Spring 2019

John Boyland

January 18, 2019

Please check here for answered questions for assignments or for schedule changes.

Instructor and TAs

Name Section Office Hours
John Boyland 401 EMS 925 R 10-12 noon, F 8-9am
Hossein Ghanbari 803, 805 EMS E218 M 10-12 noon
Antonio Moctezuma 804 EMS E218 M 2-3pm
Henry Trimbach 801, 802 EMS E218 M 3-5pm

If you have email questions, please send to


CompSci 351 is a difficult course, but a rewarding one. It is a course on programming in which you learn by doing. Thus the course involves a lot of hands-on work in the computer lab. However, this course also emphasizes concepts and so written explanations will be required.

Desired Outcomes

Students will be competent in object-oriented programming in Java, more specifically, they will be


Students must have received a `C' or better in CompSci 251. This course assumes that you are familiar with and have mastered the material from CompSci 251. In particular, this class assumes students are

  1. able to write, compile, and execute Java programs;
  2. able to use control structures, including methods, recursion, and exceptions;
  3. able to use standard datatypes including arrays, strings, and array lists;
  4. able to define classes with information hiding: abstract data types (ADTs);
  5. familiar with different kinds of testing;


The required textbook for the course is

Michael Main. Data Structures and Other Objects Using Java. Addison-Wesley. 3rd or 4th edition.


The grade for the course will be computed from the following parts:

Collaboration Quiz
You must pass a collaboration quiz in lecture.
There will be a week of midterm examinations worth 20% of the grade; these will take place during regular lecture and lab hours. There will be one final exam worth 20% of the grade.
There will be a homework due every week (14 in all), partly programming and partly text. Each homework is due at 10:00 pm on Mondays Note that this is a hard deadline, since the solutions will be posted at the same time. No late homework will be accepted. Each homework is worth 3% of the grade. After all homeworks are graded, the lowest grade will be dropped. This policy is in place to give students flexibility in times of personal emergencies. Do not misuse it.

There will be twelve or more lab assignments that should be done during lab. Each completed lab counts 1% of the total grade and the lowest lab scores will be dropped to get 11 scores. They are graded pass/fail, with partial credit (IP, in progress) given for an incomplete lab. With permission of your TA, you may complete a partially finished lab at a later point if you run out of time; it is your responsibility to show the TA that the lab has been completed. Note that you must finish the lab and inform your TA by Saturday midnight of the same week to receive a pass for that lab. Also note that you must either be present during lab hours, or prearrange your absence with your TA to get any credit for the lab. Missed lab assignments cannot be made up.

Over the course of the semester, there will be 12 (or more) graded quizzes during lecture. Quizzes are related to material covered during lectures. Each quiz counts 1% of the total grade and the ten best quiz scores will be counted. There is no way to make up a missed quiz, but if you know that you will not be able to attend lecture during the week, you can make use of “remote learning” (Section 8).
Exceptions to these rules can be made only in extraordinary circumstances. Advance notice of a need for an exception should be given whenever possible.


Programs and written assignments will be graded for correctness, suitability, style, clarity and practicality. Although we may provide solutions to some assignments, there are usually a wide variety of correct answers to any particular assignment.

Academic Honesty

All graded assignments must be your own work (your own words), but you may work with other people as long as you list their names prominently on the first page of the assignment, and/or in a comment at the top of the assignment, for example:

// Wendy Lee, Homework #6, CS 351
// I discussed this assignment with Sam White,
// and Pat Long.  We looked at each other's design notes, 
// but did not exchange the copies.
For this course, verbal communication and collaboration using non-code text or hand-written code is permitted, as long as it is properly documented. Documentation must also be made for help from anyone not in the course, such as a tutor, friend, or relative, and for information off the Web. You must also document any help that you gave to another person--be very careful that you do not tell them the steps they need to use. When in doubt, have them contact an instructor or authorized tutor.

For this course's homework assignments, you are required to show your work, not just show the final product. This is done using git by committing after every stage of your coding, and at least every day that you do work on the program. So before you make changes to your code during debugging (for instance), please commit your code if you haven't committed lately. Showing your work is your best defence against allegations of misconduct; you can show how you gradually reached you solution.

Please delete any copies of assignment from previous semester. Any use of the work from previous semester of this class is not permitted and is grounds for failing the class.

You may not make copies of assignments through email, messaging, USB drives or any other automatic copying technique, except where specifically indicated in an assignment. Even a screenshot of code may not be sent, except to the class instructors or authorized tutors. Similarly, you may not make xerographic copies of portions of homework, or give people print-outs of your programs. At the very least, you must write every word in your assignments. If you are unsure whether something is permitted, please check with an instructor or TA. If you turn in a program which is an electronic copy (or a variation of a copy) of other people's, then the source and people who give credit to the source will receive zero for the assignment, while those who do not give credit may be given an 'F' grade for the course. Do not send your programs by to other people! It will not help them learn and they will turn in your code or a minor variation as their own.

Whether or not you have permission of the other, submitting someone else's work as your own is plagiarism, a serious instance of academic misconduct. Everyone is responsible for learning the material themselves. Some of the assignments may be graded in person, especially in cases where the individual contribution to the assignment is not clear. If you are graded in person, you will be expected to demonstrate that you have mastered techniques used in the material you submitted.

Grade equivalents

All assignments will be assigned a numeric grade. Often, however, letter grades will be used. This table shows how these letter grades are converted into numeric values.

Letter Grade A+ A AB B BC C CD D DF F P IP
Equivalent Score 100 95 90 85 80 75 70 65 60 40 100 50
A grade written _ is not yet available; it does not mean zero. A grade of I means there is some work the student has not yet done. If this work is not turned in, the grade may revert to a grade of zero.

Course Grades

At the end of the course, the numeric grade will be converted into a letter grade according to the following scale:

Letter Grade A A- B+ B B- C+ C C- D+ D D- F
Minimum Score 92 90 87 82 80 77 72 70 67 62 60 0
There is no curve, but the instructors reserve the right to increase a grade if they believe it would not reflect the student's mastery of the material. A grade can only be decreased for academic dishonesty.


This course meets weekly for 60 contact hours. You also have required reading of about 500 pages, which we estimate will take approximately 50 hours. There are thirteen required homework assignments, each of which will take 10 or more hours. This yields a total estimated workload of 240 hours.


Date Topic Relevant reading
1/22 Abstract Data Types Ch. 2
1/29 Dynamic Arrays Ch. 3
2/5 Iterators Lecture notes
2/12 Linked Lists Ch. 4
2/19 Linked List Variations Lecture Notes
2/26 Generics, Linked Iterators Ch. 5
3/5 Stacks and Queues Ch. 6, 7
3/26 Binary Search Trees Ch. 9
4/2 Navigating Trees Lecture Notes
4/9 Maps Ch 5.7, Oracle's Map tutorial
4/16 Hashing Ch. 11
4/23 Graphs Ch. 14
4/30 Sorting Ch. 12
5/7 XML Lecture Notes
5/13 Final Examination (Monday 10:00-12:00 noon)  

Remote Learning

We provide a way for people to take CS 351 even if they have busy professional schedules during the day. These people must still arrange to be present for the midterm and final examinations, but they can be excused from quizzes and lab exercises if they do extra work:

Although they receive no grade credit for doing so, students using these options for remote learning are still welcome to attend and participate in all lectures and laboratory exercises. A student may opt-out of remote learning at any time by simply not sending email.


If you will be needing any accomodation in this course for any reason, please contact the instructor. Please also be aware of the standard University policies:

About this document