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. The last project is due at midnight of the last day of classes. 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 be penalized by -20 % on the project grade. There are no late submissions for Project 5, as university policy forbids any due dates past the last day of classes.

Project Due Date Weighting Comments
1 An implementation of linked lists in C++. Due at 22:00 on the Tuesday of Week 5. Linked Lists
2 Due at 22:00 on the Tuesday of Week 7. Stacks, Queues, and Deques
3 Due at 22:00 on the Tuesday of Week 9. Trees
4 Due at 22:00 on the Tuesday of Week 11. Hash Tables
5 Due at 24:00 on the last day of classes. 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 80 in Projects 1, 2, 3, and 4, you may meet with the 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 80. If you cannot determine the cause of the errors, you may still meet with the instructor and together you will determine the short-comings of your code. In this case, your maximum grade will vary between 60 and 70, again, depending on your input and your awareness of the issues at hand. If your original submission did not even attempt to implement some of the required functionality, you can still achieve a grade of 50 if you have done a significant amount of work yourself and can explain to the instructor what is happening.

What You May Do

You may:

  • Make multiple submissions—we will use the last,
  • Make a late submission without making a submission on the original due date,
  • 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, and
  • 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

Projects which are late must be resubmitted as described below. A project which is submitted late is not considered to be resubmitted. The clock on the machine which deals with LEARN UWATERLOO is synchronized and its time stamp will be used. You may submit multiple times to. Failure for LEARN UWATERLOO to work for you is not an excuse. If LEARN WATERLOO does not work, you must email your code to the course instructors, together with detailed description of why you are not using the standard submission process.


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 ignored. If you feel that the wrong file was marked (LEARN UWATERLOO requires us to manually select the most recent project), please contact the laboratory assistant. 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.

Resubmission/Late Submissions

While the TAs will be available to help you with your projects, the TAs will not be marking them, so do not approach them for extra marks. If you receive a mark of less than 80% in any of the first four projects, you may resubmit your project up to two weeks after the original project due date. The maximum mark you may receive on a resubmission is 80%.

Project 4 will not have an opportunity for a resubmission. Your submitted project, if it does not achieve a grade of 80, will be inspected individually to determine if it merits a higher grade.

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