Course Projects

There are five projects given out during the Academic Term for this course. With the exception of the last project, the projects are due at 22:00 (10:00 P.M.) of the Tuesday immediately following the week with the corresponding laboratory. Projects are submitted through Learn. For the first four projects, when the drop box closes, a late box will open that will be available for two hours until midnight. Late projects will receive a maximum grade of 70%.

Project Due Date Weighting Comments
1 Due Tuesday, January 16 at 22:00 (10:00pm). Linked Lists
2 Due Tuesday, January 30 at 22:00 (10:00pm). Stacks, Queues, and Deques
3 Due Tuesday, February 13 at 22:00 (10:00pm). Trees
4 Due Tuesday, March 13 at 22:00 (10:00pm). Hash Tables
5 Due Tuesday, March 27 at 22:00 (10:00pm). Graphs

Each project will be given by a list of requirements and sample test code. The sample test code must be such that passing the sample test code will guarantee a grade of 50 % on the project. That is, it will test that member functions are named correctly and that the basic functionality is present. Students are expected to do their own testing, though testing tools and some minimal tests will be provided.


If you receive a grade less than 70 in Projects 1, 2, 3, and 4, you may meet with the course instructor to determine what is wrong with your project. Assuming you have made significant progress toward a complete submission, if you can determine yourself the problem and come up with a solution, the maximum grade you can get is 70. If you cannot determine the cause of the errors, you may still meet with the course instructor and together you will determine the short-comings of your code. In this case, your maximum grade will vary between 50 and 60, again, depending on your input and your awareness of the issues at hand.

The course instructor will examine all Project 5 submissions that achieve a grade less than 70 to determine if there is merit for a grade up to a maximum of 70.

What You May Do

You may:

  • Make multiple submissions—only the last is kept.
  • Declare and define other classes and other member functions not specified in the project description; however, if these appear in other files, those files must be included with your submission.
  • Reuse classes from previous projects; however, you must include those files with your submission.
  • If you reuse previous projects, you are, of course, allowed to make corrections to those projects.
  • You may even, though you must be very cautious, overload the given member functions or add additional parameters to those member functions so long as those extra parameters have default values and the functions as specified in the project may be called with no issues or ambiguities.
  • You may use the following standard library functions (and no others) in Projects 1 through 4:
    Library Header FileFunctions and Classes
    #include <iostream> All functions and classes.
    #include <cassert> assert( predicate );
    #include <algorithm> std::min( T, T );
    std::max( T, T );
    std::swap( T&, T& );
    #include <cmath> All functions.
    #include <cfloat> All constants.
    #include <climits> All constants.
    See Project 5 for restrictions (if any) for that project alone. If you would like another function added to this list, you must first make a request to the course instructor. The use of any other standard library function or class will result in an automatic 0 on that project.

Compiler and Testing

All testing will be performed on the Unix server ecelinux and it is a requirement that your submissions compile and run on that machine. Source code which compiles using a Windows IDE but does not compile under g++ will receive a mark of 0.

Late Projects

If you were late for your submission, you can still submit the project two hours after the deadline. You will receive a maximum grade of 50% in the project. Suppose you are an engineer working on a project that has specified deadline with penalties in place if you are late. Is the party contracting with you going to relieve you of your obligations under the contract? In the same way, you should consider these projects your contractual obligations with this course.


The purpose of the projects is to help you learn the course material and to help you begin to implement your own personal library of tools. Many of the subsequent projects will rely on previous ones (for example, you may be asked to specifically use your linked list classes to implement more complex data structures).

Program Documentation and Style

The following programming style is required for all projects.

Your name and ID must appear at the top of all files which you have created or modified.

Write clear and understandable code. Improve the clarity of your code by using vertical and horizontal spacing, meaningful variable names, proper indentation and comments.

Precede each function with comments indicating:

  • What it does
  • What each parameter is used for
  • Assumptions that it makes
  • How it handles errors
Exactly one project will be marked for comments and style. You will not be told which project was marked, nor when the marking has taken place.


You are allowed to add whatever private or public class functions you feel are necessary.


Each project will be submitted as a gzipped tar file through LEARN UWATERLOO. The naming convention for each of the four projects is:


where uwuserid is your UW User ID, M is the project number, and p and tar.gz are in lower-case characters.

For example, a student John Smith with the UW User ID j99smith would submit the third project as j99smith_p3.tar.gz

The commands executed will always be

   tar -cvf uwuserid_pM.tar file1.h file2.h etc.h
   gzip uwuserid_pM.tar

In the first command, file1.h file2.h etc.h represents all header files that you created and that are required to work with your project. If you reuse a previous class, for example, Single_list.h, you must include it in your submission. If you introduce a helper class that was not specified in the project description, you must include it, as well. The output of the gzip command will be a file with the name uwuserid_pM.tar.gz.

If you make a mistake during a submission, you may simply resubmit and the original submission will be overwritten. All other files are ignored, including those with, for example, a capital P instead of a lower-case p. They will not be considered as submissions.

Many students submit the project in the form

Standard Libraries

You are not allowed to use any standard libraries other than, where indicated iostream.

Failing project grades

If you receive a mark of less than 70% in any of the projects, you have the opportunity to meet with the course instructor. You should first determine what went wrong with your submission and try to fix as much as you can. You are welcome at this point to get your friends to help you correct your code. When you meet with the course instructor, you will discuss what went wrong, and discuss strategies for moving forward. Depending on your responses, you can receive a grade of up to 70%.

Input Files for Visual Studio.NET

Instructions for finding and testing the executable from Visual Studio.NET are provided here:

  1. Copy the data text files, e.g. sl01 in Project 2, and paste them into the 'Debug' directory, found in the folder of your project.
  2. Open the command line prompt (Start→Programs→Accessories→Command prompt)
  3. cd to the debug directory. For example, if your project is in the folder C:\ECE250\project2\, then write in the command prompt the following command:
    >> cd C:\ECE250\project2\debug
    write the name of the project followed by '<' followed by the name of the data file, e.g., in the same example, write
    >> project2 < sl01