CS106B - Programming Abstractions

CS106B: Programming Abstractions (Stanford Univ.). Instructor: Professor Julie Zelenski. This course is the natural successor to Programming Methodology and covers such advanced programming topics as recursion, algorithmic analysis, and data abstraction using the C++ programming language, which is similar to both C and Java. Programming Abstractions assumes that you already have familiarity with good programming style and software engineering issues (at the level of Programming Methodology), and that you can use this understanding as a foundation on which to tackle new topics in programming and data abstraction. Topics: Abstraction and its relation to programming. Software engineering principles of data abstraction and modularity. Object-oriented programming, fundamental data structures (such as stacks, queues, sets) and data-directed design. Recursion and recursive data structures (linked lists, trees, graphs). Introduction to time and space complexity analysis. Uses the programming language C++ covering its basic facilities. (from

The CS106 Philosophy

Lecture 01 - The CS106 Philosophy, Why take CS106B?, Introducing C++
Lecture 02 - The Similarities between C++ and Java, Looking at an Example C++ Code
Lecture 03 - C++ Libraries, C++ Basics - Strings, Operators
Lecture 04 - C++ Console I/O, C++ File I/O, Stream Operations
Lecture 05 - Client Use of Classes and Templates
Lecture 06 - More Containers, Map Class, Set Class
Lecture 07 - Seeing Functions as Data: Specific Plot Functions, Client Callback Function, Recursion
Lecture 08 - Solving Problems Recursively, Functional Recursion, Example of Recursion
Lecture 09 - Thinking Recursively, Fractal Code, Mondrian Art, Hanois Towers, Tree of Recursive Calls
Lecture 10 - Procedural Recursion, Permute Code, Recursive Backtracking and its Usefulness
Lecture 11 - Backtracking Pseudocode, Looking for Patterns, Introduction to Pointers
Lecture 12 - Pointer Operations, Pointer Basics, Pointer and Dynamic Arrays, Recursive Data
Lecture 13 - Introduction to Linked List, Coding with Linked List, Discussing Recursive Data
Lecture 14 - Algorithm Analysis, Evaluating the Performance, Big-O Notation, Recursive Algorithms, Sorting
Lecture 15 - Selection Sort, Insertion Sort, Merge Sort
Lecture 16 - Partitioning for Quicksort, Different Input Scenarios, Functional Templates
Lecture 17 - Sort Template with Callback, Class Division, Storage for Objects, Class Implementation
Lecture 18 - Abstract Data Types, Creating the Vector Class, Private Data Members, Insert and Remove Functions
Lecture 19 - Rules of Template Implementation, Explanation of the Working, Stack Class
Lecture 20 - Stack Implementations, Queue Implementation, Text Editor Case Study
Lecture 21 - Buffer: Vector vs Stack, Cursor Design, Linked List Insert/delete, Implementing Map
Lecture 22 - Map as Vector, Trees in General, Binary Search Tree for Numbers, Operating on Trees
Lecture 23 - Pathfinder Demo, Graphs: Explanation, Graph Representation in C++, Graph Search Algorithms
Lecture 24 - Hashtable Idea, Hash Functions, Hash Table Performance, Compare Map Implementations
Lecture 25 - Lexicon Case Study, Lexicon as Sorted Vector, Lexicon as BST, Lexicon as Hash Table
Lecture 26 - General Review of the Course, Thinking About Design
Lecture 27 - Guest Lecturer: Keith Schwarz, About the C++ Language

CS106B - Programming Abstractions
Instructors: Professor Julie Zelenski. Handouts. Assignments. Exams. This course covers such advanced programming topics as recursion, algorithmic analysis, and data abstraction.