CS 361 - Advanced Data Structures and Algorithms
Fall 2015: Monday 4:20pm-7:00pm, Dragas 1117


  • Dr. Tamer Nadeem
  • "nadeem AT cs.odu.edu"
  • ECSB 3204
    • Office Hours: Monday

Teaching Assist. (TA)

  • Nelson Kattula
  • "nkattula AT cs.odu.edu"
  • TBA
    • Office Hours: Wednesday
             or by appointment


  • 08/24/15 - Class' webpage is up. Please check for frequent updates/announcements.

Course Description

This course explores data structures, algorithms for manipulating them, and the practical problems of implementing those structures in real programming languages and environments. Heavy emphasis is placed upon the analysis of algorithms to characterize their worst and average case requirements for running time and memory.

Perhaps more than any other course, CS361 should expand the students “toolbox” of basic techniques for manipulating data at both the conceptual and the concrete level. At the conceptual level, the student will see a broad selection of standard practices and approaches used in program design. At the concrete level, the student will begin what should be a career-long practice of accumulating useful, reusable code units.

Course Overview

  • In this course you learn different types of data structures and how to implement them using C++. Moreover, you will learn how to analyze these algorithms to characterize their worst and average case requirements for running time and memory.
  • Course requirements include (1) Class participation, (2) Homework and programming assignments, (3) Mid-term exam, and (4) Final exam.  


In addition to the course slides listed on the course website, the required textbook for this course is:
        "Data Structures and Algorithm Analysis in C++", Mark A. Weiss, 2013. Pearson; 4 edition (June 23, 2013), ISBN-13: 978-0-132-84737-7.

Another good optional textbook is:

    "Data Structures with C++ Using STL", William Ford and William Topp, Pearson; 2 edition (July 27, 2001). ISBN-13: 978-0-130-85850-4.


The prerequisites for this course are:

  • CS 250, Problem Solving and Programming, or CS 333, Problem Solving and Programming in C++.

    I will assume that you are familiar with the basics of C++, including:
    • the various C++ statements and control-flow constructs,
    • the built-in data types,
    • the use of arrays, pointers, pointers to arrays, and linked lists,
    • the use and writing of functions, and
    • the basic use of structs and classes for implementing abstract data types.

    In addition, students should be familiar with certain basic programming techniques that are largely independent of any specific programming language:
    • software design (i.e., top-down design, also known as “stepwise refinement”)
    • testing software, including the use of scaffolding code (stubs and drivers) and the selection of test data for functional testing, special values testing, and boundary value testing.
    • debugging, including the use of debugging output, of using automatic debuggers to set breakpoints and trace program execution, and the general process of reasoning backwards from failure locations to the faulty code responsible for the failure.

    If you are uncertain about your preparation in any of these areas, you can review them at the CS333 website.

  • CS 252 Introduction to Unix for Programmers
  • MATH 163, Pre-Calculus II, or equivalents.

Software Requirements

C++ compiler: The “official” compiler for this course is the Free Software Foundation's g++ (also known as gcc or GNU CC), version 4.5 or higher. This is the compiler that the instructor and/or grader will use in evaluating and grading projects. If you have access to other compilers, you may use them, but you are responsible for making sure that their projects can be compiled by the instructor and/or the course's grader using the official compiler.

You may want to develop your programs on the most convenient compiler and then port it over to the Dept's Linux machines for final testing. Please don't underestimate the amount of time that may be involved in coping with subtle differences among compilers.

You can do all work in this course using g++ on the CS Dept Liniux servers via ssh/X. If you like, however, you can obtain the g++ compiler for free from a variety sources.

Course Policies

Grading Scheme

  • Midterm 25%
  • Assignments/Programming 40%
  • Final Exam 35%


The grading scale is as follows:
(+ and - modifiers will be applied as appropriate)

    90-100   A
    80-89   B
    70-79   C
    0-69   F

Late Assignments

Late assignments are not accepted.


I expect you to attend class and to arrive on time. Your grade may be affected if you are consistently tardy. If you have to miss a class, you are responsible checking the course website to find any assignments or notes you may have missed. Students may leave after 15 minutes if the instructor or a guest lecturer does not arrive in that time.

Computer Account and Email

Students should have an ODU OCCS account. This is the account associated with your @odu.edu email. It will allow you to log into the course's Blackboard site. All ODU students automatically receive this account, though you may need to activate yours, particularly if you are new to ODU.

Students should activate their @odu.edu e-mail accounts and check them every day. If a student chooses to have his/her messages forwarded to another account, it is the student's responsibility to take the necessary steps to have them forwarded.

All students in this course are responsible for making sure they have working accounts prior to the first assignment.

Academic Integrity / Honor Code

By attending Old Dominion University you have accepted the responsibility to abide by the honor code. If you are uncertain about how the honor code applies to any course activity, you should request clarification from the instructor. The honor code is as follows:

    "I pledge to support the honor system of Old Dominion University. I will refrain from any form of academic dishonesty or deception, such as cheating or plagiarism. I am aware that as a member if the academic community, it is my responsibility to turn in all suspected violators of the honor system. I will report to Honor Council hearings if summoned."

In particular, submitting anything that is not your own work without proper attribution (giving credit to the original author) is plagiarism and is considered to be an honor code violation. It is not acceptable to copy source code or written work from any other source (including other students), unless explicitly allowed in the assignment statement. In cases where using resources such as the Internet is allowed, proper attribution must be given.

Any evidence of an honor code violation (cheating) will result in a 0 grade for the assignment/exam, and the incident will be submitted to the Department of Computer Science for further review. Note that honor code violations can result in a permanent notation being placed on the student's transcript. Evidence of cheating may include a student being unable to satisfactorily answer questions asked by the instructor about a submitted solution. Cheating includes not only receiving unauthorized assistance, but also giving unauthorized assistance. For class files kept in Unix space, students are expected to use Unix file permission protections (chmod) to keep other students from accessing the files. Failure to adequately protect files may result in a student being held responsible for giving unauthorized assistance, even if not directly aware of it.

Students may still provide legitimate assistance to one another. You are encouraged to form study groups to discuss course topics. Students should avoid discussions of solutions to ongoing assignments and should not, under any circumstances, show or share code solutions for an ongoing assignment.

Please see the ODU Honor Council’s webpage for other concrete examples of what constitutes cheating, plagiarism, and unauthorized collaboration. All students are responsible for knowing the rules. If you are unclear about whether a certain activity is allowed or not, please contact the instructor.

Classroom Conduct

Please be respectful of your classmates and instructor by minimizing distractions during class. Cell phones must be turned off during class.

Make-up Work

Make-ups for graded activities are possible only with a valid written medical or university excuse. It is the student's responsibility to give the instructor the written excuse and to arrange for any makeup work to be done. A makeup exam may be different (and possibly more difficult) than the regularly scheduled exam.

Accessibility Services

Old Dominion University is committed to ensuring equal access to all qualified students with disabilities in accordance with the Americans with Disabilities Act. The Office of Educational Accessibility (OEA) is the campus office that works with students who have disabilities to provide and/or arrange reasonable accommodations.

  • If you experience a disability which will impact your ability to access any aspect of my class, please present me with an accommodation letter from OEA so that we can work together to ensure that appropriate accommodations are available to you.
  • If you feel that you will experience barriers to your ability to learn and/or testing in my class but do not have an accommodation letter, please consider scheduling an appointment with OEA to determine if academic accommodations are necessary.

The Office of Educational Accessibility is located at 1021 Student Success Center and their phone number is (757)683-4655. Additional information is available at the OEA website: http://www.odu.edu/educationalaccessibility/

Seeking Help

The course website should be your first reference for questions about the class. The course schedule will be updated throughout the semester with links to assigned readings. Announcements and frequently asked questions (FAQ) will also be posted to the course website.

The best way to get help is to come to office hours. If you cannot make office hours, please send an email to setup an appointment.

I am available via email, but do not expect or rely on an immediate response.

Class Calender

This is just a draft of the course's calender. Dates and topics are subject to change during the course