Lecture slides and notes

    Part 1. Brief introduction to (the procedural part of) C++

  1. [ slides ] Administrative aspects, "Hello World", Makefile
  2. [ slides ] [ notes ] Getting Started in C++: types, declarations and definitions, control structures, references, pass-by-value and pass-by-reference.
  3. [ slides ] [ notes ] Terminal control, enumerations, source files, programs, Makefile
  4. [ slides ] [ notes ] Pointers and arrays
  5. [ slides ] [ notes ] Structures, function pointers, our first C++ class: a Lexer, client use of map
    • Source files for all examples, including the Makefile are in this directory.
  6. [ slides ] [ notes ] Client use of basic data structures: vector, stack, exceptions
    • Source files for Lexer and well-formed expression codes, including the Makefile are in this directory.
    • Source files for a simple postfix evaluator, including the Makefile are in this directory.

    Part 2. Analysis and algorithmic concepts and techniques

  7. [ slides ] [ notes ] Asymptotic notations, Fibonacci sequence, introductory iteration and recursion.
  8. [ slides ] Growth of functions and more asymptotic notations, getting used to comparing growth rates of functions
  9. [ black board only ] Solving recurrences by guess and induct and by recurrence tree
  10. [ slides ] Iteration and Recursion, examples on arrays/vectors, including binary search and merge sort.
  11. [ slides ] [ notes ] Asymptotic analysis and recurrence in action: searching and sorting, function template, callback function

    Part 3. Design and Analysis of Fundamental Data Structures

    "Sequential" data structures: Vectors and lists

  12. [ slides ] [ notes ] Vectors and amortized analysis
  13. [ slides ] [ notes ] Lists and C++ iterators

    Trees

  14. [ slides ] [ notes ] Binary trees: basic operations and applications, tree traversals, Huffman trees, counting trees
  15. [ slides ] [ notes ] Heap, Heap Sort, Priority Queues
  16. [ slides ] [ notes ] Basic binary search trees, counting BSTs
  17. [ slides ] [ notes ] BSTs in depth: AVL Trees, Red-Black Trees, (2,4)-Trees, Splay trees, Amortized analysis again.

    Sets, Maps, Hash Tables

  18. [ slides ] Hash tables, applications
  19. [ We will skip this ] Maps, sets, multi-maps

    "Advanced" data structures

  20. [ slides ] Data structures on Disks, and B-trees (Credits: all slides stolen from Prof. Shivnath Babu's course at Duke, and from Prof. Michael Franklin's course at Berkeley.)
  21. Augmented data structures and geometric problems
  22. Persistent data structures

    Graphs (take 331, 429, 431, 529, 531)

  23. [ slides ] Graphs, graph traversal, applications
  24. [ slides ] Implementing the Graph ADT
  25. [ slides ] Weighted graphs

    Epilogue

  26. Final exam review