中国大学慕课上陈越老师和何钦铭老师主讲的数据结构课程课程链接,本项目整理课程相关内容,并利用Python将课程相关作业进行实现,相关视频内容视频链接,具体题目信息可以直接搜索题目名字进行查询。
To-do:
- 加入其他语言完成作业的branch,欢迎大家fork添加!
- 没有达到满分的作业,如果发现请在issue中添加,我会尽早解决。
通过研究很多例子去理解究竟什么是“数据结构”、为什么在教数据结构的时候要讲算法、以及相关的基本概念和常用术语。希望这次课的学习能让你明白为什么要学,并且在后面的学习中知道哪些术语是什么意思。
- 1.1 什么是数据结构
- 1.2 什么是算法
- 1.3 应用实例:最大子列和问题
- 01-复杂度1 最大子列和问题
- 01-复杂度2 Maximum Subsequence Sum
- 01-复杂度3 二分查找
介绍最基础的一种数据结构类型:线性结构,包括线性表、堆栈和队列。重点关注:如何用数组或者链表存储对象及关系、如何实现主要操作,以及有哪些典型的应用。
- 2.1 线性表及其实现
- 2.2 堆栈
- 2.3 队列
- 2.4 应用实例:多项式加法运算
- 小白专场:多项式乘法与加法运算- C实现(3小节共27:43)
- 线性结构之习题选讲[陈越]:Reversing Linked List
- 02-线性结构1 两个有序链表序列的合并
- 02-线性结构2 一元多项式的乘法与加法运算
- 02-线性结构3 Reversing Linked List
- 02-线性结构4 Pop Sequence
一般树的表示、二叉树及其存储、二叉树的遍历,当然最后还有详细讲解二叉树同构问题的"小白专场"。
- 3.1 树与树的表示
- 3.2 二叉树及存储结构
- 3.3 二叉树的遍历
- 小白专场:树的同构 - C语言实现
- 树之习题选讲-Tree Traversals Again
- 03-树1 树的同构
- 03-树2 List Leaves
- 03-树3 Tree Traversals Again
二叉搜索树,平衡二叉树。
- 4.1 二叉搜索树
- 4.2 平衡二叉树
- 小白专场:是否同一棵二叉搜索树- C实现
- 树之习题选讲-Complete Binary Search Tree
- 04-树4 是否同一棵二叉搜索树
- 04-树5 Root of AVL Tree
- 04-树6 Complete Binary Search Tree
"堆":类似操作系统进程调度这样的场景中,我们需要管理一个带任务优先级的队列,经常要从优先队列中获取优先级最高的任务。堆结构将告诉你如何高效地解决这类问题。
"哈夫曼树和哈夫曼编码":编码是通讯和数据传输中最基本的问题。如何针对不同的出现频率高效地编码以提高传输和存储的效率?哈夫曼树就是一种很好的方法。
"集合及运算":有许多貌似复杂的问题可以归结为等价类划分问题。以树形式表示的并查集方法就可以很方便、高效地解决等价类划分问题。
- 5.1 堆
- 5.2 哈夫曼树与哈夫曼编码
- 5.3 集合及运算
- 小白专场:堆中的路径 - C语言实现
- 小白专场[陈越]:File Transfer - C语言实现
- 树之习题选讲- Huffman Codes
- 05-树7 堆中的路径
- 05-树8 File Transfer
- 05-树9 Huffman Codes.py
了解什么是图,怎么存储、以及怎么遍历图。
- 6.1 什么是图
- 6.2 图的遍历
- 6.3 应用实例:拯救007
- 6.4 应用实例:六度空间
- 小白专场:如何建立图- C语言实现
- 06-图1 列出连通集
- 06-图2 Saving James Bond - Easy Version
- 06-图3 六度空间
最短路径问题。
- 7.1 最短路径问题
- 小白专场:哈利•波特的考试- C语言实现
- 07-图4 哈利·波特的考试
- 07-图5 Saving James Bond - Hard Version
- 07-图6 旅游规划.py
最小生成树问题,拓扑排序。
- 8.1 最小生成树问题
- 8.2 拓扑排序
- 图之习题选讲-旅游规划
- 08-图7 公路村村通
- 08-图8 How Long Does It Take
- 08-图9 关键活动
简单排序,希尔排序,堆排序,归并排序。
- 9.1 简单排序(冒泡、插入)
- 9.2 希尔排序
- 9.3 堆排序
- 9.4 归并排序(3小节共28:22)
- 习题选讲-Insert or Merge
- 09-排序1 排序
- 09-排序2 Insert or Merge
- 09-排序3 Insertion or Heap Sort
快速排序,表排序,基数排序,排序算法的比较。
- 10.1 快速排序
- 10.2 表排序
- 10.3 基数排序
- 10.4 排序算法的比较
- 习题选讲-Sort with Swap(0,*)
- 10-排序4 统计工龄
- 10-排序5 PAT Judge
- 10-排序6 Sort with Swap(0, i)
散列查找的核心:“直接计算”的函数怎么设计?有冲突怎么办?
- 11.1 散列表
- 11.2 散列函数的构造方法
- 11.3 冲突处理方法
- 11.4 散列表的性能分析
- 11.5 应用实例:词频统计
- 小白专场[陈越]:电话聊天狂人- C语言实现
- 习题选讲-Hashing - Hard Version
- 11-散列1 电话聊天狂人
- 11-散列2 Hashing
- 11-散列3 QQ帐户的申请与登陆
- 11-散列4 Hashing - Hard Version
- 串的模式匹配(KMP算法)