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 techniques 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
  • Vectors in C++, Stack, and Queue implementation
  • Trees, Hashing, Map, Set, Graphs Implementation

Course Syllabus

Course Materials

1About the CS106 Series at Stanford, The CS106 Philosophy, Why take CS106B?, Logistics of the Course, Introducing C++Lecture01.pdf
2Similarity between C++ & JavaLecture02.pdf
3C++ Libraries – Standard Libraries, C++ String Type, C++ string vs Java String and C++ Console I/OLecture03.pdf
4C++ Console I/O, C++ File I/O, Stream Operations.Lecture04.pdf
5Client Use of Templates, Vector Class and Stack, Queue etc.Lecture05.pdf
6Containers, Maps, Use of Set, Set Higher-level Operations, Why Set is DifferentLecture06.pdf
7Seeing Functions as DataLecture07.pdf
8Common Mistakes Stumbled UponLecture08.pdf
9Thinking Recursively, Procedural vs FunctionalLecture09.pdf
10Refresh: Permute Code, Tree of Recursive Calls etc.Lecture10.pdf
11Backtracking Pseudocode, Sudoku Solver, Sudoku Code, Cryptarithmetic, Dumb Solver, Smarter Solver.Lecture11.pdf
12Pointer and Pointer Operations.Lecture12.pdf
13Coding with Linked ListLecture13.pdf
14Algorithm Analysis, Evaluating the Performance, Analysis of CodesLecture14.pdf
15Sorting TechniquesLecture15.pdf
16More on SortingLecture16.pdf
17Object Oriented TechniquesLecture17.pdf
18Abstract Data Types, Wall of Abstraction, Why ADTs?Lecture18.pdf
19Rules of Template Implementation, Explanation of the WorkingLecture19.pdf
20Recap of the Vector-based Implementation for Stack and Linked List Implementation for StackLecture20.pdf
21Buffer and Map as VectorLecture21.pdf
22Map as Vector, A different Strategy:Lecture22.pdf
23Pathfinder Demo, Graphs: Examples, Graphs: Explanation, Implementation StrategiesLecture23.pdf
24Compare Map Implementations, Hashtable Idea, Hash Functions, Hash CollisionsLecture24.pdf
25Lexicon Case Study, Lexicon as Sorted Vector, Lexicon as BST, Lexicon as Hash TableLecture25.pdf
26Thinking About Design, Runtime Performance, Memory Used, Code Complexity
27Guest Lecturer: Keith Schwarz, About the C++ Language, Quick History of C++, C++ PhilosophyH38-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:

Best Free C/C++ Programming Courses

We have compiled a list of C and C++ Programming courses that could help you learn basic and advanced programming techniques. These courses are offered online by different universities, and they are absolutely FREE.