CS315, Data Structures and the Analysis of Algorithms
Fall 2019


Location and Time: Building 76, room 123; MWF 1 - 1:50
Office Hours: MWF 11-1, TTh 1:50 - 2:50
Textbook: None, but on the CS315 reference materials page I've posted web links to articles and PowerPoint animations for all the topics we'll cover
Prerequisites: CS125 (or equivalent, see me)
Final Exam: TBA
  Course Outline


  • Understand the critical relationship between data structures and algorithmic problem solving
  • Understand the concept of an abstract data type and the difference between an abstract data type and an implementation thereof
  • Understand the motivation and basic mathematical principles of asymptotic complexity theory ( O-notation) and be able to use it to categorize performance and make quantitative performance predictions
  • Understand (and, I hope, admire) the basic abstract properties of the fundamental data structures of modern computer science
  • Understand the major implementation options for the major data structures and their relative advantages and disadvantages in typical applications (including computer security, where applicable)
  • Further proficiency in the use of  C, particularly pointers, to implement data structures
  • Proficiency in the discrete mathematics of data structures
  • Abstract data types
  • Linked lists:
    • Unidirectional and bi-directional
    • Circular
    • Headed (lists with sentinels)
  • Multi-linked structures (including sparse matrices)
  • Fundamental concepts of asymptotic complexity theory (O-notation)
    • Motivation
    • Mathematical foundations
  • Linear structures:
    • Stacks
    • Queues
    • Dequeues (including input- and output-restricted)
  • Binary trees
    • Topological properties
    • Traversals
      • Pre-order
      • In-order
      • Post-order
    • Threaded trees
    • Binary search trees
    • AVL trees
    • Heaps and heapsort
    • Huffman trees
  • B-trees
  • Hash tables
  • Graphs
    • Representation techniques 
    • Types of graphs and their uses: weighted and non weighted, directional and non-directional, cyclic and acyclic, connected and dis-connected (including cliques and components), bi-connected, flow graphs (including cyclomatic complexity and its relationship to software testing)
    • Breadth first and depth first traversals and their connection to reachability, cyclicity, and connectedness
    • Minimal cost spanning trees (Primm's and Kruskal's algorithms)
    • Topological ordering (Dijskstra's algorithm)
  • NP-completeness (as time permits)

Grading:   There will be 2 midterms @20% each, a cumulative final (heaviest on post-midterm #2 material, however) worth 30%, and around half a dozen programming assignments cumulatively worth the remaining 30%. All 3 exams will be closed book. I grade on a curve so that a difficult exam should not be a cause for panic. If the overall curve at the end of the semester were sufficiently tight, I'd be perfectly happy to give all A's and B's (or even, in theory, all A's, were everyone to do really well). Historically, however, the curve has not been that tight. Note: regardless of curve, you can't get an A in this course unless you complete all the programming assignments. If you have difficulty with a programming assignment, come see me --- that's what I get paid for.

Programming: There will be several programming assignments for you to translate theory into practice with data structures. Homework submission instructions may be found here. Probably you've already used the campus Linux programming environment in a class that is a pre-req for this one. If not, I've prepared some web pages for you to help you through the learning curve. Very little sophistication in UNIX or its user interface (shell) will be required; the web pages I pointed you to, above, should really give you access to all you'll need; if you need help, come see me --- I get paid to help you (and usually enjoy it, come to that). The campus Linux operating system is provided by a Red Hat, whose documentation can be found online, although for this course you shouldn't need any of the Red Hat documentation. Please read my integrity policy for the programming in this course; you will be held accoutable for compliance to it whether you've read it or not.

Other stuff. Some items are included here because I think they're important, some because some bureaucrat or other thinks they're important (in some cases, I actually agree; in some I don't):

This page last changed on 9 Aug 2019 by M.S. Jaffe