数据结构与算法课程是计算机大类相关专业的一门重要专业基础课,它的核心位置毋庸置疑,既是操作系统、软件工程、数据库概论、编译技术等课程的基础,同时也是从事计算机相关工作必须掌握的专业基础素养。
本课程旨在讲解实用的数据结构与算法,包括线性表、栈和队列、树和二叉树、图等基本数据结构;AVL树、Merkle树、Trie树等复杂数据结构;以及检索和排序等重要操作算法。让大家体会数据结构在多个领域的应用,例如Linux中用到的双循环链表数据结构,编译原理中的表达式计算、区块链中用到的Merkle树、人工智能词汇切分中用到的Trie树,从而感受数据结构的博大精深和无限魅力。
通过本课程的学习,使学习者能够针对具体问题选择合适的数据结构,以合理地组织数据、有效地存储和处理数据,以锻炼数据抽象能力;使学习者能够将数据结构和应用付诸编程实践,正确地设计、编制高效算法,并对算法进行分析和评价,以锻炼良好的程序设计开发技能;使学习者能够应用工程知识和专业背景知识分析复杂工程问题,进行复杂程序设计的训练,解决工程实践问题,以锻炼学习者的工程实践能力;
本课程在每章开头视频,通过两个关键词进行章节主要内容概览。课程视频侧重理论和实践紧密结合,按照基本结构操作-算法讲解与实现-数据结构基本应用-应用扩展实践的路线讲解,不但锻炼你的抽象思维能力,更侧重动手实践能力的培养,注重基本数据结构的算法设计与实现以及它们的应用场景,在高度抽象和高度具体之间搭起一座桥梁。200多个视频片段有助于你自主地碎片化学习;CodeByCode视频直接在开发环境中讲解代码,使你“所见即所得”,减少起步的挫败感、增加自信;单元测试包含了大量的考研真题,使你在练习中得以掌握提高。
CH1 概述
1.0 概述导学
1.1 为什么学习数据结构
1.2 抽象数据类型
1.3 数据结构
1.4 算法与算法评价标准
1.5 算法分析
概述测验
CH2 线性表
2.0 线性表导学
2.1 线性表的基本概念
2.2 顺序表的建立和判空
2.3 顺序表表的插入和删除
2.4 顺序表的查找定位
2.5 单链表的建立与判空
2.6 单链表的查找
2.7 单链表的插入
2.8 单链表的删除
2.9 单循环链表
2.10 双链表
2.11 线性表的应用:一元多项式的表示和运算
2.12 线性表的应用:Josephus问题
2.13 补充: 动态链接库(选修)
2.14 补充: Linux内核链表(选修)
线性表测验
CH3 栈和队列
3.0 栈和队列导学
3.1 栈和队列的概念
3.2 顺序栈
3.3 链栈
3.4 栈的应用:进制转换
3.5 栈的应用:括号匹配
3.6 栈的应用:“聪明的学生”
3.7 栈的应用:迷宫
3.8 栈的应用:表达式求值
3.9 循环队列
3.10 链队列
3.11 队列的应用:迷宫
3.12 队列的应用:农夫过河
3.13 补充:双端队列(选修)
栈和队列测验
CH4 树和二叉树
4.0 树和二叉树导学
4.1 二叉树的概念
4.2 二叉树的数学性质
4.3 二叉树的深度优先遍历
4.4 二叉树的广度优先遍历
4.5 二叉树的重构
4.6 二叉树的交叉遍历
4.7 二叉树的顺序存储
4.8 二叉树的链式存储
4.9 (递归)二叉树的建立和遍历
4.10 (非递归)二叉树的建立和遍历
4.11 二叉树的其他操作
4.12 线索二叉树
4.13 二叉树的应用:哈夫曼树和哈夫曼编码
4.14 树和森林
树和二叉树测验
CH5 搜索树
5.0 搜索树导学
5.1 二分查找判定树
5.2 二叉排序树的基本概念
5.3 二叉排序树的查找
5.4 二叉排序树的插入
5.5 二叉排序树的删除
5.6 平衡二叉树的概念
5.7 AVL树的四种调整
搜索树测验
CH6 图
6.0 图导学
6.1 图的基本概念
6.2 图的存储表示
6.3 图的周游
6.4 最小生成树
6.5 Kruskal算法
6.6 Dijstra算法
6.7 拓扑排序
6.8 关键路径
6.9 六度空间
6.10 中国邮递员问题
图测验
CH7字典
7.0 字典导学
7.1 字典基本概念
7.2 跳跃链表基本概念
7.3 跳跃链表的建立和查找
7.4 跳跃链表的插入和删除
7.5 散列表的概念
7.6 散列函数和冲突
7.7 散列表的建立、插入和删除
7.8 补充:Merkle树的基本概念(选修)
7.9 补充:Merkle树的建立和查找比较(选修)
字典测验
CH8排序
8.0 排序导学
8.1 排序基本概念
8.2 插入类排序
8.3 选择类排序
8.4 交换类排序
8.5 基数类排序
8.6 归并类排序
排序测验
CH9 字符串
9.0 字符串导学
9.1 字符串基本概念
9.2 BF算法
9.3 KMP算法
字符串测验