Stanford Engineering Everywhere (SEE) offers few computer science courses to students online and at no charge. SEE courses include the content offered in an actual campus course including lecture videos, as well as all lecture slides, reading lists and handouts, homework assignments, quizzes, examinations, and when appropriate, solution sets.

One of the courses is Programming Abstractions (CS106B). This course covers advanced programming topics such as recursion, algorithmic analysis, and data abstraction using the C++ programming language, which is similar to both C and Java.

This course assumes that student has familiarity with good programming style and software engineering issues, and that student can use this understanding as a foundation on which to tackle new topics in programming and data abstraction.

Important topics of this course are:

  • Transitioning to C++, syntax, procedural paradigm
  • Standard C++ and CS106 Libraries
  • Functional and procedural recursion
    Algorithm analysis, sorting, template functions
  • Dynamic arrays and Linked lists
  • Vector, Stack, and Queue implementation
  • Trees, Hashing, Map, Set, Graphs Implementation

Course Syllabus

Course Materials

Lecture Description Slides
1 About the CS106 Series at Stanford, The CS106 Philosophy, Why take CS106B?, Logistics of the Course, Introducing C++ Lecture01.pdf
2 Similarity between C++ & Java Lecture02.pdf
3 C++ Libraries – Standard Libraries, C++ String Type, C++ string vs Java String and C++ Console I/O Lecture03.pdf
4 C++ Console I/O, C++ File I/O, Stream Operations. Lecture04.pdf
5 Client Use of Templates, Vector Class and Stack, Queue etc. Lecture05.pdf
6 Containers, Maps, Use of Set, Set Higher-level Operations, Why Set is Different Lecture06.pdf
7 Seeing Functions as Data Lecture07.pdf
8 Common Mistakes Stumbled Upon Lecture08.pdf
9 Thinking Recursively, Procedural vs Functional Lecture09.pdf
10 Refresh: Permute Code, Tree of Recursive Calls etc. Lecture10.pdf
11 Backtracking Pseudocode, Sudoku Solver, Sudoku Code, Cryptarithmetic, Dumb Solver, Smarter Solver. Lecture11.pdf
12 Pointer and Pointer Operations. Lecture12.pdf
13 Coding with Linked List Lecture13.pdf
14 Algorithm Analysis, Evaluating the Performance, Analysis of Codes Lecture14.pdf
15 Sorting Techniques Lecture15.pdf
16 More on Sorting Lecture16.pdf
17 Object Oriented Techniques Lecture17.pdf
18 Abstract Data Types, Wall of Abstraction, Why ADTs? Lecture18.pdf
19 Rules of Template Implementation, Explanation of the Working Lecture19.pdf
20 Recap of the Vector-based Implementation for Stack and Linked List Implementation for Stack Lecture20.pdf
21 Buffer and Map as Vector Lecture21.pdf
22 Map as Vector, A different Strategy: Lecture22.pdf
23 Pathfinder Demo, Graphs: Examples, Graphs: Explanation, Implementation Strategies Lecture23.pdf
24 Compare Map Implementations, Hashtable Idea, Hash Functions, Hash Collisions Lecture24.pdf
25 Lexicon Case Study, Lexicon as Sorted Vector, Lexicon as BST, Lexicon as Hash Table Lecture25.pdf
26 Thinking About Design, Runtime Performance, Memory Used, Code Complexity
27 Guest Lecturer: Keith Schwarz, About the C++ Language, Quick History of C++, C++ Philosophy H38-C++sansCS106.pdf
Prerequisites: Solid performance in Programming Methodology and readiness to move on to advanced programming topics. A comparable introductory programming course (including high school AP courses) is often a reasonable substitute for our Programming Methodology.

Stanford Engineering Everywhere, License: Creative Commons BY-NC-SA. For more information about using these materials and the Creative Commons license please visit: