StickMind
CSE/CS101:C++ 编程抽象思维
Spring 2023
  • 主页
  • 日程
  • 课程
  • 资源

课程内容

  • 第 1 次课. Welcome
    tl;dr: 介绍课程相关内容,开发环境,编程语言等——为什么学习计算机编程?
    [录播(公开)] [讲义] [代码]

    推荐阅读:

    • Textbook, Ch 1.1~1.3
    • CS Minor, Stanford University
    • TIOBE Index, TIOBE
    • CMake: Introduction to the basics
  • 第 2 次课. Variables, Expression and Graphics
    tl;dr: 介绍 C++ 变量、表达式等——计算机是如何存储信息的?
    [录播(公开)] [讲义] [代码]

    推荐阅读:

    • Textbook, Ch 1.4~1.6
    • CMake: FetchContent (CMake 3.11+)
  • 第 3 次课. Control Structures
    tl;dr: 介绍 C++ 控制结构——计算机是如何做选择的?
    [录播(公开)] [讲义] [代码]

    推荐阅读:

    • Textbook, Ch 1.7
    • Linux 内核升级 C 语言标准, OSCHINA
    • Cognitive strategies and looping constructs: an empirical study, Elliot Soloway, Jeffrey Bonar, Kate Ehrlich
  • 第 4 次课. Functions and Libraries
    tl;dr: 介绍 C++ 函数以及接口的实现——计算机是如何实现抽象的?
    [录播(公开)] [讲义] [代码]

    推荐阅读:

    • Textbook, Ch 2 & Ch 7.2
    • Stepwise Refinement, LearnLearn
    • CMake: Creating a C++ library with CMake, Declaration of VAR
  • 第 5 次课. Strings and Streams
    tl;dr: 介绍 C++ 字符串处理接口以及文件流等 I/O 概念——计算机是如何处理文本信息的?
    [录播(公开)] [讲义] [代码]

    推荐阅读:

    • Textbook, Ch 3 & Ch 4.3 & Ch 7.4
    • Panama Palindromes, English for Students
    • CMake: Testing
  • 第 6 次课. Vector, Grid, Stack and Queue
    tl;dr: 介绍抽象数据类型以及课本上提供的一些容器的使用——计算机是如何对实际问题进行建模的?
    [录播] [讲义]

    推荐阅读:

    • Textbook, Ch 5.1~5.3
    • Stack and Queue Animation, Illinois CS277
  • 第 7 次课. Map, Set and Lexicon
    tl;dr: 介绍抽象数据类型以及课本上提供的一些容器的使用——计算机是如何对实际问题进行建模的?
    [录播] [讲义]

    推荐阅读:

    • Textbook, Ch 5.4~5.6
    • Word Ladder, Keith Schwarz
    • Word Unscrambler, unscramble.org
  • 第 8 次课. Recursion and Similarity
    tl;dr: 介绍递归思想,基本的递归编程范式,以及递归分形问题——如何使用递归思维进行问题求解?
    [录播] [讲义]

    推荐阅读:

    • Textbook, Ch 7 & Ch 8.4
    • Recursive Drawing, recursivedrawing.com
  • 第 9 次课. Algorithm Analysis
    tl;dr: 进一步强化递归思想,介绍算法分析——如何评估程序的执行效率?
    [录播] [讲义]

    推荐阅读:

    • Textbook, Ch 8.1 & Ch 10.2-10.4
  • 第 10 次课. Recursion Strategy
    tl;dr: 介绍递归子集/排列两种范式,尝试建立递归过程的心智模型——如何利用递归解决更复杂的问题?
    [录播] [讲义]

    推荐阅读:

    • Textbook, Ch 8.2~8.3
  • 第 11 次课. Recursion Backtracking
    tl;dr: 介绍递归在回溯算法中的应用——如何利用递归解决更复杂的问题?
    [录播] [讲义]

    推荐阅读:

    • Textbook, Ch 9
  • 第 12 次课. Sorting Algorithm
    tl;dr: 介绍常见排序算法。
    [录播] [讲义]

    推荐阅读:

    • Textbook, Ch 10
    • Sorting Animation
    • Sorting Algorithms Animations
    • Why quicksort is better than mergesort?
  • 第 13 次课. Pointers, Arrays and Structs
    tl;dr: 介绍针对内存的几种抽象概念,了解数据在内存中表示的机制
    [录播] [讲义]

    推荐阅读:

    • Textbook, Ch 11
    • Pointers vs References in C++
  • 第 14 次课. Dynamic Allocation, LinkedList
    tl;dr: 介绍链表和动态内存管理
    [录播] [讲义]

    推荐阅读:

    • Textbook, Ch 12.1~12.3
  • 第 15 次课. Data Abstraction, Class
    tl;dr: 介绍数据抽象实现 List 类,补充用对象管理资源的思想
    [录播] [讲义]

    推荐阅读:

    • Textbook, Ch 6
    • Classes and Objects, C++ FAQ
    • Resource acquisition is initialization
    • Memory Management and RAII
  • 第 16 次课. Dynamic Array
    tl;dr: 介绍动态数组,对比链表分别实现 Stack、Queue、Vector 等线性容器类
    [录播] [讲义]

    推荐阅读:

    • Textbook, Ch 12.4~12.5, 14
    • Implementing the Vector Class, Steven J. Zeil
  • 第 17 次课. Binary Heap
    tl;dr: 基于动态数组介绍二叉堆,实现 PriorityQueue 类
    [录播] [讲义]

    推荐阅读:

    • Textbook, Ch 16.5
    • Heap Visualization
  • 第 18 次课. BST Tree
    tl;dr: 基于链表介绍二叉搜索树,实现 Map 和 Set 类
    [录播] [讲义]

    推荐阅读:

    • Textbook, Ch 16.1~16.2
    • AVL Tree Visualization
  • 第 19 次课. Huffman Coding
    tl;dr: 综合二叉搜索树和递归等技术实现哈夫曼编码压缩算法
    [录播] [讲义]

    推荐阅读:

    • Textbook, Ch 16.1~16.2
    • Huffman Coding Visualization, Maoyuan Sun
  • 第 20 次课. Wrap Up
    tl;dr: 课程回顾,补充 HashMap 类的实现
    [录播(公开)] [vector] [HashMap] [补充]

    推荐阅读:

    • Materials

本系列课程由 StickMind 监制

  • stickmind.com
  • cs102.stickmind.com