- 第01周a--前言
- 第01周b--1.1数据结构研究
- 第01周c--1.2基本概念和术语1
- 第01周d--1.2基本概念和术语2
- 第01周e--1.3抽象数据类型的表示与实现
- 第01周f--1.4算法与算法分析1
- 第01周g--1.4算法与算法分析2
- 第01周h--1.4算法与算法分析3
- 第01周h--1.4算法与算法分析4
- 第02周01--2.1线性表的定义和特点
- 第02周02--2.2案例引入
- 第02周03--2.3线性表的类型定义
- 第02周04--2.4线性表的顺序表示和实现1
- 第02周05--2.4线性表的顺序表示和实现2
- 第02周06--类C语言有关操作补充1
- 第02周07--类C语言有关操作补充2
- 第02周08--2.4线性表的顺序表示和实现3
- 第02周09--2.4线性表的顺序表示和实现4--查找算法
- 第02周10--2.4线性表的顺序表示和实现5--插入算法
- 第02周11--2.4线性表的顺序表示和实现6--删除算法
- 第02周12--顺序表小结
- 第3周01--2.5线性表的链式表示和实现1--链表概念
- 第3周02--2.5线性表的链式表示和实现2--单链表的定义
- 第3周03--2.5线性表的链式表示和实现3--单链表基本操作1-初始化和判断空表
- 第3周04--2.5线性表的链式表示和实现4--单链表基本操作2--销毁单链表
- 第3周05--2.5线性表的链式表示和实现5--单链表基本操作3--清空单链表
- 第3周06--2.5线性表的链式表示和实现6--单链表基本操作4--求单链表的表
- 第3周07--2.5线性表的链式表示和实现7--单链表基本操作5--取第i个元素值
- 第3周08--2.5线性表的链式表示和实现8--单链表基本操作6--按值查找
- 第3周09--2.5线性表的链式表示和实现9--单链表基本操作7--插入节点
- 第3周10--2.5线性表的链式表示和实现10--单链表基本操作8--删除节点
- 第3周11--2.5线性表的链式表示和实现11--单链表基本操作9--查找插入删除算法分析
- 第3周12--2.5线性表的链式表示和实现12--单链表基本操作10--头插法建立链表
- 第3周13--2.5线性表的链式表示和实现13--单链表基本操作11--尾插法建立链表
- 第04周01--2.5.3循环链表1
- 第04周02--2.5.3循环链表2--两个链表合并
- 第04周03--2.5.4双向链表1
- 第04周04--2.5.4双向链表2--双向链表的插入操作
- 第04周05--2.5.4双向链表3--双向链表的删除操作
- 第04周06--单链表、循环链表、双向链表的比较
- 第04周07--2.6顺序表和链表的比较
- 第04周08--2.7线性表的应用1--线性表的合并
- 第04周09--2.7线性表的应用2--有序表的合并--用顺序表实现
- 第04周10--2.7线性表的应用3--有序表的合并--用链表实现
- 第04周11--2.8案例分析与实现1--多项式运算
- 第04周12--2.8案例分析与实现2--稀疏多项式运算
- 第04周13--2.8案例分析与实现3--图书信息管理
- 第05周01--3.1栈和队列的定义和特点1--栈和队列介绍
- 第05周02--3.1栈和队列的定义和特点2--3.1.1栈的定义和特点
- 第05周03--3.1栈和队列的定义和特点1--3.1.2队列的定义和特点
- 第05周04--3.2案例引入
- 第05周05--3.3栈的表示和实现1--3.3.1栈的抽象数据类型定义
- 第05周06--3.3栈的表示和实现2--3.3.2栈的顺序表示和实现1--栈的顺序表示
- 第05周07--3.3栈的表示和实现3--3.3.2栈的顺序表示和实现2--顺序栈操作1
- 第05周08--3.3栈的表示和实现4--3.3.2栈的顺序表示和实现3--顺序栈操作2
- 第05周09--3.3栈的表示和实现5--3.3.2栈的顺序表示和实现4--顺序栈操作3
- 第05周10--3.3栈的表示和实现6--3.3.3链栈表示和实现
- 第05周11--3.4栈和递归
- 第05周12--3.5队列的表示和实现1--3.5.1队列的类型定义
- 第05周13--3.5队列的表示和实现2--3.5.2队列的顺序表示和实现1
- 第05周14--3.5队列的表示和实现3--3.5.2队列的顺序表示和实现2i
- 第05周15--3.5队列的表示和实现4--3.5.3队列的链式表示和实现
- 第06周01--第4章串、数组和广义表1-4.1串的定义
- 第06周02--第4章串、数组和广义表2-4.2案例引入
- 第06周03--第4章串、数组和广义表3-4.3串的类型定义、存储结构
- 第06周04--第4章串、数组和广义表4-4.3串的操作--串的匹配算法1--BF算法
- 第06周05--第4章串、数组和广义表5-4.3串的操作--串的匹配算法2--KMP算法
- 第06周06--第4章串、数组和广义表6-4.4数组1--数组的定义及特点
- 第06周07--第4章串、数组和广义表7-4.4数组2--数组的抽象类型定义
- 第06周08--第4章串、数组和广义表8-4.4数组3--数组的顺序存储
- 第06周09--第4章串、数组和广义表9-4.4数组4--对称矩阵压缩存储
- 第06周10--第4章串、数组和广义表10-4.4数组5--三角矩阵、对角矩阵压缩存储
- 第06周11--第4章串、数组和广义表11-4.4数组6--稀疏矩阵压缩存储
- 第06周12--第4章串、数组和广义表12-4.5广义表
- 第06周13--第4章串、数组和广义表13-4.6案例分析与实现
- 第07周01--5.1树和二叉树的定义1--5.1.1树的定义
- 第07周02--5.1树和二叉树的定义2--5.1.2树的基本术语
- 第07周03--5.1树和二叉树的定义3--5.1.3二叉树的定义
- 第07周04--5.2案例引入
- 第07周05--5.3 树和二叉树的抽象数据类型定义
- 第07周06--5.4 二叉树的性质和存储结构1--二叉树性质1、2、3
- 第07周07--5.4 二叉树的性质和存储结构2--满二叉树和完全二叉树
- 第07周08--5.4 二叉树的性质和存储结构3--二叉树性质4、5
- 第07周09--5.4 二叉树的性质和存储结构4--二叉树的存储结构1-顺序存储结构
- 第07周10--5.4 二叉树的性质和存储结构4--二叉树的存储结构2-链式存储结构
- 第07周11--5.5 遍历二叉树和线索二叉树1--遍历二叉树
- 第07周12--5.5 遍历二叉树和线索二叉树2--由遍历序列确定二叉树
- 第08周01--5.5遍历二叉树和线索二叉树3--二叉树的先序递归遍历算法
- 第08周02--5.5遍历二叉树和线索二叉树4--二叉树的递归遍历算法及分析
- 第08周03--5.5遍历二叉树和线索二叉树5--二叉树的遍历算法--中序非递归算法
- 第08周04--5.5遍历二叉树和线索二叉树6--二叉树的遍历算法--层次遍历算法
- 第08周05--5.5遍历二叉树和线索二叉树7--二叉树的遍历算法应用1--建立二叉树算法
- 第08周06--5.5遍历二叉树和线索二叉树8--二叉树的遍历算法应用2--复制、求结点数、求叶子结点数
- 第08周07--5.5遍历二叉树和线索二叉树9--线索二叉树
- 第08周08--5.6树和森林1--树的存储结构1-双亲表示法
- 第08周09--5.6树和森林2--树的存储结构2-孩子链表
- 第08周10--5.6树和森林3--树的存储结构3-孩子兄弟表示法
- 第08周11--5.6树和森林4--树与二叉树的转换
- 第08周12--5.6树和森林5--森林与二叉树的转换
- 第08周13--5.6树和森林6--树和森林的遍历
- 第09周01--5.7哈夫曼树及其应用1-引子
- 第09周02--5.7哈夫曼树及其应用2-5.7.1哈夫曼树的基本概念
- 第09周03--5.7哈夫曼树及其应用3-5.7.2哈夫曼树的构造算法1
- 第09周04--5.7哈夫曼树及其应用4-5.7.2哈夫曼树的构造算法2-哈夫曼树算法实现
- 第09周05--5.7哈夫曼树及其应用5-5.7.3哈夫曼编码1-哈夫曼编码思想
- 第09周06--5.7哈夫曼树及其应用6-5.7.3哈夫曼编码2-哈夫曼编码的算法实现
- 第09周07--5.7哈夫曼树及其应用7-5.7.3哈夫曼编码3-文件的编码和译码
- 第09周08--6.1图的基本概念和术语1
- 第09周09--6.1图的基本概念和术语2
- 第09周10--6.2案例引入
- 第09周11--6.3图的类型定义
- 第10周01--6.4图的存储结构1-1邻接矩阵表示法1-无向图的邻接矩阵
- 第10周02--6.4图的存储结构2-1邻接矩阵表示法2-有向图和网的邻接矩阵
- 第10周03--6.4图的存储结构3-2采用邻接矩阵表示法创建无向网
- 第10周04--6.4图的存储结构4-3邻接矩阵表示法的优缺点
- 第10周05--6.4图的存储结构5-6.4.2邻接表表示法1-无向图的邻接表
- 第10周06--6.4图的存储结构6-6.4.2邻接表表示法2-有向图的邻接表
- 第10周07--6.4图的存储结构7-6.4.2邻接表表示法3-建立邻接表的算法
- 第10周08--6.4图的存储结构8-6.4.2邻接表表示法4-邻接表表示法优缺点及与邻接矩阵的关系
- 第10周09--6.4图的存储结构9-6.4.3十字链表
- 第10周10--6.4图的存储结构10-6.4.4邻接多重表
- 第10周11--6.5图的遍历1--深度优先搜索遍历思想
- 第10周12--6.5图的遍历2--深度优先搜索遍历实现--邻接矩阵上的遍历算法
- 第10周13--6.5图的遍历3--深度优先搜索遍历实现--邻接表上的遍历算法及算法分析
- 第10周14--6.5图的遍历4--广度优先搜索遍历及其实现
- 第11周01--6.6图的应用1--6.6.1最小生成树1--生成树及其构造
- 第11周02--6.6图的应用2--6.6.1最小生成树2--最小生成树及其典型应用
- 第11周03--6.6图的应用3--6.6.1最小生成树3--MST性质
- 第11周04--6.6图的应用4--6.6.1最小生成树4--构造最小生成树1--Prim算法
- 第11周05--6.6图的应用5--6.6.1最小生成树5--构造最小生成树2--Kruskal算法
- 第11周06--6.6图的应用6--6.6.2最短路径1--最短路径问题抽象
- 第11周07--6.6图的应用7--6.6.2最短路径2--Dijkstra算法
- 第11周08--6.6图的应用8--6.6.2最短路径3--Floyd算法
- 第11周09--6.6图的应用9--6.6.3拓扑排序
- 第11周10--6.6图的应用10--6.6.4关键路径1--用AOE网表示工程计划
- 第11周11--6.6图的应用11--6.6.4关键路径2--求解关键路径
- 第12周01--第7章查找1--7.1查找的基本概念
- 第12周02--第7章查找2--7.2线性表的查找1--7.2.1顺序查找1--顺序查找算法
- 第12周03--第7章查找3--7.2线性表的查找2--7.2.1顺序查找2--顺序查找算法分析
- 第12周04--第7章查找4--7.2线性表的查找3--7.2.2折半查找1--折半查找算法
- 第12周05--第7章查找5--7.2线性表的查找4--7.2.2折半查找2--折半查找算法分析
- 第12周06--第7章查找6--7.2线性表的查找5--7.2.3分块查找1--分块查找算法
- 第12周07--第7章查找7--7.2线性表的查找6--7.2.3分块查找2--分块查找算法分析及比较
- 第12周08--第7章查找8--7.3树表的查找1--7.3.1二叉排序树1--二叉排序树定义
- 第12周09--第7章查找9--7.3树表的查找2--7.3.1二叉排序树2--二叉排序树查找--递归算法
- 第12周10--第7章查找10--7.3树表的查找3--7.3.1二叉排序树3--二叉排序树查找算法分析
- 第12周11--第7章查找11--7.3树表的查找4--7.3.1二叉排序树4--二叉排序树的插入和生成
- 第12周12--第7章查找12--7.3树表的查找5--7.3.1二叉排序树5--二叉排序树的删除
- 第13周1--7.3树表的查找6--7.3.2平衡二叉树1--平衡二叉树的定义
- 第13周2--7.3树表的查找7--7.3.2平衡二叉树2--平衡调整方法1
- 第13周3--7.3树表的查找8--7.3.2平衡二叉树3--平衡调整方法2--四种类型的调整
- 第13周4--7.3树表的查找9--7.3.2平衡二叉树4--平衡调整方法3--例题
- 第13周5--7.4散列表的查找1--7.4.1散列表的基本概念
- 第13周6--7.4散列表的查找2--7.4.2散列函数的构造
- 第13周7--7.4散列表的查找3--7.4.3处理冲突方法1--开地址法1-线性探测法
- 第13周8--7.4散列表的查找4--7.4.3处理冲突方法2--开地址法2-二次探测法、伪随机探测法
- 第13周9--7.4散列表的查找5--7.4.3处理冲突方法3--链地址法
- 第13周10--7.4散列表的查找6--7.4.4散列表的查找及性能分析
- 第14周01--第8章排序1--8.1排序概述
- 第14周02--第8章排序2--8.2插入排序1--直接插入排序
- 第14周03--第8章排序3--8.2插入排序2--折半插入排序
- 第14周04--第8章排序4--8.2插入排序3--希尔排序
- 第14周05--第8章排序5--8.3交换排序1--冒泡排序
- 第14周06--第8章排序6--8.3交换排序2--快速排序1
- 第14周07--第8章排序7--8.3交换排序3--快速排序2--快速排序算法分析
- 第14周08--第8章排序8--8.4选择排序1--简单选择排序
- 第14周09--第8章排序9--8.4选择排序2--堆排序1
- 第14周10--第8章排序10--8.4选择排序3--堆排序2--堆调整
- 第14周11--第8章排序11--8.4选择排序4--堆排序3--建立堆
- 第14周12--第8章排序12--8.4选择排序5--堆排序4--堆排序算法及分析
- 第14周13--第8章排序13--8.5归并排序
- 第14周14--第8章排序14--8.6基数排序
- 第14周15--第8章排序15--各种排序方法比较
本课程是计算机类专业的主干基础课程,也可供其他专业学生选修。
本课程用C、C++、Java、Python四种语言授课,修过其中一门即可修读本课程。对于关键的数据结构与算法知识点,讲授多种语言的实现方式,对其他部分知识点,给出4种语言的实现代码供学生自学。在讲授过程中,引导学生理解不同语言的差异并领悟不同语言的共性,将“计算思维”融进课程,最终可让学生理解“程序设计语言只是一样工具”,编写程序时不受限于特定语言。
本课程抓住学生“动手编程困难”的痛点,在讲授数据结构与算法理论知识的基础上,重点强调实践,带领学生一行一行编写代码,将“产生思路——编写程序——运行调试”的全过程展示给学生,将算法思想和程序设计规范融入到讲授过程中,让学生有沉浸式体验。在讲授过程中,将带领学生共同寻找思路解决问题,将与学生一起遇到并修改常见错误。本课程强调过程化考核,针对程序设计的特点,设置了在线评测的习题集和测验题集,给学生提供了充足的动手实践编程的机会。在完成本课程学习后,学生将由“纸上谈兵”型转变为“实战”型,为成为合格的软件工程师和算法工程师打好坚实基础。