Course Overview

CS 315 is primarily concerned with the topic of data structures: what the various data structures are, how they are used, and the consequences of choosing one data structure versus another when designing a program to accomplish a particular task. The data structures to be discussed include arrays, dynamic arrays, various linked lists, balanced trees of various kinds, heaps, and hashing.

In addition to the data structures we will discuss: abstraction and the use of C++ classes to implement abstraction; recursion; running time performance of different algorithms and their relevance in choosing a data structure.

Programming will be done in C++; important language features such as inheritance will be discussed.

Textbook

Data Structures and Algorithm Analysis in C++, 3/e, Mark Allen Weiss, ISBN-10: 032144146X, ISBN-13: 9780321441461, Addison-Wesley, 2007.

Prerequisites

CS-215, Programming II and CS-242, Discrete Structures. Students who have not acquired a strong foundation in the fundamentals of programming (e.g. earned a grade below a C in CS-215) are encouraged to retake CS-215 or its equivalent before taking this class.

Important Dates
Monday, October 19 Midterm Exam 1
Wednesday, November 18 Midterm Exam 2
Wednesday, December 16 Final Exam 5:00 -- 6:50
Lecture and Lab

The proposed outline of what is to be covered appears in the course schedule. This page will be updated regularly. So, please check it often. You are required to attend all lectures and labs and to read the relevant sections of the text prior to lecture and the relevant online documentation prior to lab. Attending lectures and labs is extermely important to your success in this course. Only with a compelling reason that can be documented you may make up a lab that you have missed.

Programming Project

There will be four or five programming projects. You are to implement these projects in C++. You may work at home with any C++ environment, but your completed work must be submitted ready to run using Linux g++; g++ is available in the labs that run linux (Darwin 25 and 28) and on the CS Department linux server.

Your submitted work must consist of a single directory which contains a makefile and all source files that are needed to build an executable, any data files needed to run the program, and any documentation that resides in a separate file.

The makefile must have a default target which compiles any executables that are required for the assignment (i.e. if you type just "make"), a target which runs the executable (i.e. assuming there is only one executable, typing "make run" should run it), and a target which removes any files that were created by the compilation (i.e. typing "make clean" should remove any object files and executables leaving only the files you submitted). In other words, I want to be able to type "make" and then "make run" and run the program.

You may submit your files individually, or you can combine them into a single compressed archive (zip under Windows, or tar and/or zip under Linux). In either case the file(s) that contains your work are to be submitted as follows: On the web page that lists the projects for the semester there will be a link to a form that will allow you to submit your file(s). This form will ask you for a username and password and the identity of the assignment. I will provide the usernames and passwords to you by email. The username is probably your first-name followed by your last-name. If the submission is successful you will be shown a Linux ls listing of the file that you sent. If the file is an archive (i.e. zip or tar), you will be shown a listing of the contents of the archive. The files you send are stored under my account and identified by your name and the project identity, so you do not have to name your files in any special way. If you resubmit a file it will overwrite any previous submission with the same name.

No work will be accepted late without a compelling explanation. If you have not completed your assignment by the time it is due, you may turn in what you have completed for partial credit. However, little credit will be given for programs that do not compile without errors or can not be tested to demonstrate that it partially implements the project.

Midterms and Final Exam

There will be two midterm exams. All exams are closed book. Midterms will be held at the start of lab. Although they are designed to last an hour, because they are held in lab you have more time if you need it. Exams cover the material from the textbook, the lectures, and the lab. Specifically, you are responsible for all the material covered in the lecture and labs regardless whether they appear in the textbook. Only with a compelling reason that can be documented you may make up a missed exam.

The final exam will be comprehensive.

Grading
Projects 40%
Labs 15%
Midterms 30%
Final Exam 15%

You must separately pass the exams (2 midterms and the final) and the programming projects in order to pass the class.

A- 90 A 93
B- 80 B 83 B+ 87
C- 70 C 73 C+ 77
D- 60 D 63 D+ 67

Policy on Collaboration
You are encouraged to discuss course material with other students. Don't be shy about consulting with anyone, but please understand that you, and only you, bear the responsibility for solving the problems associated with producing a successful project or solving a homework assignment. Please keep the following in mind.

For the details of University policies regarding add and drop, cheating and plagiarism, grade appeal, access to programs for students with disability, and diversity statement, refer to Important Policies and Procedures for Students web-site.

CS majors must take this course for a letter grade. University guidelines regarding the grade of Incomplete will be strictly adhered to. Incomplete grades will only be given for circumstances beyond a student's control; inability to keep up with the work due to an excessive course load, for example, is insufficient to warrant an Incomplete.