数据结构课程不仅是计算机、人工智能等专业的重要基础课程,也是通讯、电子、数学、统计等相关学科的必修课。它是程序设计课程的进阶篇,其中所涵盖的理论知识和技术方法,以及在数据抽象能力、编程实践能力等方面所提供的训练,是学习算法设计、机器学习、操作系统、编译、数据库等后继课程的必备前提,也可为从事科研或大型工程项目的实际研发打下坚实的基础。
教学内容
本课程主要探讨计算机求解问题过程中相关数据的组织和处理方法,具体可分为3个部分:
• 第1章综述数据、数据结构、抽象数据类型、算法及其时空效率等基本概念和通用分析方法;
• 第2章到第7章从逻辑结构、存储结构和基本操作的设计与实现这3个层面分别讨论线性表、栈、队列、串、数组、广义表、树和二叉树以及图等基本数据结构类型及其应用;
• 第8章和第9章讨论查找和排序的各种实现方法,并从时间和空间上进行了定性或定量的分析和比较。
本课程的内容选取和章节编排主要依据清华大学严蔚敏教授编著的《数据结构(C语言版)》,并参考了计算机学科硕士研究生招生考试大纲。
课程特点
对每一种经典的数据结构,我们先从大家熟悉的日常生活实例引入,再结合具体实例,配合生动直观的图示或动画,由浅入深地导出它们的定义、存储实现方法以及基本操作算法的思想,并在视频中逐一详解算法实现细节,帮助大家轻松入门。对于比较复杂的算法,我们还会通过具体示例来演示和细致讲解算法执行过程及设计原理,帮助大家更好地理解其精髓。
我们还准备了丰富的综合应用案例,并从各类考试和面试真题中精心筛选出一些同步练习题以及OJ编程实训题,帮助大家加深对理论知识的感性认知,轻松掌握数据的各种常见组织和处理方法,并能针对具体问题选择合适的数据结构,提升实际编程能力。
本课程团队成员均为从事数据结构课程教学的一线教师,教学经验丰富,会及时为大家答疑解惑。
选课建议
本课程可与线下课堂教学相结合,用于计算机、电子、数学等学科相关专业学生的《数据结构》、《算法导论》、《软件技术基础》等相关课程的课前预习、混合教学、反转教学或课后复习;也适用于有信息类求职或深造需要的专业或转专业人员、相关领域的科研或工程技术人员按需补习或参考,以及有编程基础的AI或IT爱好者在线自主学习。
第一周 绪论
1.1 什么是数据结构
1.2 数据结构的基本概念(一)——逻辑结构
1.2 数据结构的基本概念(二)——物理结构
1.3 抽象数据类型
1.4 什么是算法
1.5 算法的分析与度量
【编程实训讲解】
第一周 编程实训
第一周 绪论 单元测验
第二周 线性表
2.1 线性表的定义(一)——概念和ADT
2.1 线性表的定义(二)——合并与归并
2.2 顺序表
2.3 线性链表(一)——单链表
2.3 线性链表(二)——静态链表
2.4 循环链表和双向链表
2.5 顺序表与线性链表的比较(一)——顺序表与链表
2.5 顺序表与线性链表的比较(二)——各种链表的对比
2.6 一元多项式的表示及运算
【编程实训讲解】
第二周 编程实训
第二周 线性表 单元测验
第三周 栈和队列
3.1 栈的定义与实现
3.2 栈的应用举例(一)——数制转换、括号匹配、行编辑器
3.2 栈的应用举例(二)—迷宫求解
3.2 栈的应用举例(三)—表达式求值
3.3 栈与递归的实现(一)——递归的定义
3.3 栈与递归的实现(二)——递归的实现
3.4 队列的定义与实现(一)——定义和链队列
3.4 队列的定义与实现(二)——循环队列和双端队列
第三周 编程实训
第三周 栈和队列 单元测验
第四周 串
4.1 串的定义
4.2 串的表示和实现
4.3 串的模式匹配算法(一)——朴素算法
4.3 串的模式匹配算法(二)——KMP算法
4.3 串的模式匹配算法(三)——KMP算法(续)
4.4 串的应用举例
第四周 编程实训
第四周 串 单元测验
第五周 数组和广义表
5.1 数组的定义及顺序存储
5.2 矩阵的压缩存储(一)——特殊矩阵
5.2 矩阵的压缩存储(二)——三元组顺序表
5.2 矩阵的压缩存储(三)——行逻辑链接的顺序表
5.2 矩阵的压缩存储(四)——十字链表
5.3 广义表
第五周 编程实训
第五周 数组和广义表 单元测验
第六周 树和二叉树(上)
6.1 树的定义
6.2 二叉树(一)——定义和性质
6.2 二叉树(二)——存储结构
6.3 二叉树的遍历(一)——递归算法
6.3 二叉树的遍历(二)——非递归算法
6.3 二叉树的遍历(三)——应用
第六周 树和二叉树(上) 单元测验
第六周 编程实训
第七周 树和二叉树(下)
6.4 线索二叉树(一)——基本概念及查找方法
6.4 线索二叉树(二)——遍历及线索化
6.5 树和森林(一)——树的存储结构
6.5 树和森林(二)——与二叉树的转换及遍历
6.6 赫夫曼树及其应用(一)——基本概念及编码、译码方法
6.6 赫夫曼树及其应用(二)——存储及算法实现
6.6 赫夫曼树及其应用(三)——存储及算法实现(续)
第七周 树和二叉树(下) 单元测验
第七周 编程实训
第八周 图(上)
7.1 图的定义
7.2 图的存储结构(一)——数组表示法、邻接表
7.2 图的存储结构(二)——十字链表、邻接多重表
7.3 图的遍历
7.4 图的连通性
7.5 最小生成树(一)——Prim算法
7.5 最小生成树(二)——Kruscal算法
第八周 图(上) 单元测验
第八周 编程实训
第九周 图(下)
7.6 拓扑排序
7.7 关键路径(一)——基本概念及事件最早发生时间
7.7 关键路径(二)——事件最迟发生时间及关键活动
7.8 最短路径(一)——Dijkstra算法
7.8 最短路径(二)——Floyd算法
第九周 编程实训
第九周 图(下) 单元测验
第十周 查找(上)
8.1 查找的基本概念
8.2 顺序表的查找
8.3 有序表的查找
8.4 索引顺序表的查找
8.5 二叉排序树(一)——基本概念及查找、插入
8.5 二叉排序树(二)——删除及性能分析
8.6 平衡二叉树(一)——基本概念及调平衡方法
8.6 平衡二叉树(二)——插入及性能分析
第十周 查找(上) 单元测验
第十周 编程实训
第十一周 查找(下)
8.9 哈希表(三)——冲突处理方法
8.9 哈希表(四)——查找及性能分析
8.7 B_树(一)——基本概念及查找
8.7 B_树(二)——插入及删除
8.8 B+树
8.9 哈希表(一)——基本概念
8.9 哈希表(二)——哈希函数的构造方法
第十一周 查找(下) 单元测验
第十一周 编程实训
第十二周 排序(上)
9.1 排序的基本概念
9.2 插入排序(一)——直接插入、折半插入
9.2 插入排序(二)——shell排序
9.3 交换排序
9.4 选择排序(一)——简单选择、树形选择
9.4 选择排序(二)——堆排序
第十二周 排序(上) 单元测验
第十二周 编程实训
第十三周 排序(下)
9.5 归并排序
9.6 基数排序(一)——多关键字排序、基数排序
9.6 基数排序(二)——链式基数排序
9.7 各种内部排序方法的比较
第十三周 排序(下) 单元测验
第十三周 编程实训