×

计蒜客

数据结构(2016 年秋季学期课程)

  • 已有 1036 人报名学习
¥ 500 元
原价:¥3120.75 元

数据结构是计算机中存储、组织数据的方式,是计算机科学非常重要的一部分。在这门课里,我们将用 C++ 语言描述各种数据结构。通过学习本课程,你将能理解并实现各种常见的数据结构,并能够对数据结构中的各种思想理解透彻。在课程中,你将有机会综合运用所学的数据结构内容来解决各种工程问题。

  • - 六大实践项目,带你实战之中学数据结构
  • - 每月两次直播答疑
  • - 名师一对一辅导(需单独预约)
  • - 助你获得内推名企实习和校招内推机会

课程服务

  • 专用云计算环境 不用配置直接学
  • 人工智能引导学习 让你快速上手
  • 可预约的一对一辅导 名师带你飞

教学团队

课程内容

  • 第 1 章线性表基础

    欢迎来到数据结构课程!线性表是数据结构课程的第一章,也是最常用的数据结构之一。在这一章里,会为你介绍线性表的概念,并着重讲解线性表的一种存储形式:顺序表。之后会带你实现顺序表的构造、插入、扩容、查找、删除、遍历这六种操作。在本章的最后需要你用顺序表来解决一道难题。

    本章包含以下课程内容:章节概述 / 什么是线性表 / 线性表的性质 / 什么是顺序表 / 顺序表的演示 / 顺序表的性质 / 顺序表的构造 / 顺序表的插入 / 顺序表的扩容 / 顺序表的查找 / 顺序表的删除 / 顺序表的遍历 / 顺序表的循环左移

  • 第 2 章链表

    链表是线性表的一种,每个节点里存储了数据域和指针域,其中指针域中存储指向下一个节点的指针。相比顺序表,链表在插入和删除操作上更方便。链表有很多不同类型:单项链表、双向链表、循环链表等。这一部分我们先来学习链表的基础操作,最后学习用链表解决一道难题。

    本章包含以下课程内容:章节概述 / 什么是链表 / 链表的演示 / 火车和链表 / 制造火车头 / 加入新车厢 / 从车头走到车尾 / 移除旧车厢 / 列车调头 / 各式各样的链表 / 各种链表的性质 / 创建约瑟夫环 / 删除环上元素 / 哪位同学最优秀

  • 第 3 章实验:公司管理系统

    为了帮助同学们更好的理解并掌握线性表,我们在这一章设计了一道实验题。首先,我们先会带同学们复习一下 C++ 语言的部分知识,包括构造函数和拷贝函数等。之后要求同学们用顺序表和链表的知识来完成一道实验题——公司管理系统。

    本章包含以下课程内容:章节概述 / C++ 知识复习 / C++ 知识理解 / 实验:公司管理系统

  • 第 4 章队列

    队列是一种先进先出(FIFO,First-In-First-Out)的线性表,通常用链表或者数组来实现。队列只能在队尾插入元素,只能在队首删除元素。这一部分,我们将会学习队列基础的操作以及循环队列的实现。

    本章包含以下课程内容:章节概述 / 什么是队列 / 队列的演示 / 队列的性质 / 创建一个队列 / 加入队列 / 队列里都有谁 / 谁是第一名 / 什么是循环队列 / 循环队列的性质 / 循环队列的入队和遍历 / 循环队列的出队操作

  • 第 5 章

    栈是一种先进后出(FILO,First-In-Last-Out)的线性表,栈和队列非常相像,但是栈只能在栈顶插入和删除元素。这一部分,我们将会学习栈的一些基础操作,后面我们会来学习单调栈,最后再学习用栈来解决一道难题。

    本章包含以下课程内容:章节概述 / 什么是栈 / 栈的演示 / 栈的性质 / 创建一个栈 / 入栈操作 / 出栈操作 / 输出栈顶 / 数列翻转 / 表达式求值 / 单调栈 / 单调栈的性质 / 一道单调栈的问题 / 单调栈解木板倒水问题 / 蒜头君的魔法机

  • 第 6 章实验:文本编辑程序

    为了帮助同学们更好的理解并掌握栈和队列,我们在这一章设计了一道实验题。首先,我们先会带同学们复习一下 C++ 里关于运算符重载、函数重载和函数模板的相关知识,之后要用栈和队列的知识来完成一道实验题——文本编辑程序。

    本章包含以下课程内容:章节概述 / 重载与模板 / 理解重载与模板 / 实验:文本编辑程序

  • 第 7 章哈希表

    哈希表又叫散列表,关键值通过哈希函数映射到数组上,查找时通过关键值直接访问数组。哈希函数指的是关键值和存储位置建立的对应关系。这一章我们将深入学习哈希表,学习哈希函数的构造方法,如何处理冲突等。最后尝试用哈希表解决一道难题。

    本章包含以下课程内容:章节概述 / 什么是哈希表 / 哈希表的性质 / 创建哈希表 / 哈希函数的构造方法 / 哈希函数的构造方法 / 构造哈希函数 / 处理冲突的方法 / 如何处理冲突 / 开放地址法 / 插入哈希表 / 重建哈希表 / 蒜头君筛选用户名

  • 第 8 章实验:文学作品分析

    为了帮助同学们更好的理解并掌握哈希表,我们在这一章设计了一道实验题。首先,我们先会带同学们复习一下非法内存访问和文件操作相关知识,之后要求同学们用哈希表的知识来完成一道实验题——文学作品分析。

    本章包含以下课程内容:章节概述 / 非法内存访问和文件操作 / 非法内存访问和文件操作理解 / 实验:文学作品分析

  • 第 9 章树和二叉树

    树形结构是一种重要的数据结构,其中二叉树是树里一类特殊的结构,二叉树广泛应用在计算机领域里。这一章我们先简单学习下树,然后学习二叉树的创建、存储、遍历等等,接着我们再来学习下哈夫曼编码,最后我们用二叉树来解决一道难题。

    本章包含以下课程内容:章节概述 / 什么是树 / 树的性质 / 什么是二叉树 / 二叉树的性质 / 创建二叉树 / 二叉树的存储 / 二叉树的遍历演示 / 二叉树的先序遍历 / 二叉树的中序遍历 / 二叉树的后序遍历 / 已知先序和中序求后序 / 哈夫曼编码 / 哈夫曼编码的性质 / 神奇的二叉树

  • 第 10 章实验:滤镜功能

    为了帮助同学们更好的理解并掌握树结构的存储和遍历方法,我们在这一章设计了一道实验题。我们会首先学习图像在计算机中的存储方式,以及整数的存储形式和溢出后的结果。之后要求同学们用树结构相关的知识来完成一道实验题——滤镜功能。

    本章包含以下课程内容:章节概述 / 图像与整数的存储 / 理解图像与整数的存储 / 实验:滤镜功能

  • 第 11 章二叉查找树

    二叉查找树又称二叉搜索树,二叉查找树是一类特殊的二叉树,左子树上结点权值始终小于根结点权值,右子树上结点权值始终大于根结点权值。这一课我们先会了解下二叉查找树,然后学习二叉查找树的创建、插入、查找、删除等操作。

    本章包含以下课程内容:章节概述 / 什么是二叉查找树 / 二叉查找树的演示 / 二叉查找树的性质 / 创建一个二叉查找树 / 二叉查找树的插入 / 二叉查找树的查找 / 二叉查找树的前驱和后继 / 二叉查找树的删除 / 二叉查找树的删除 / 蒜头君的新技能

  • 第 12 章平衡二叉查找树

    平衡二叉查找树是一种优化的二叉查找树。在本章里,会为你介绍平衡二叉查找树的基本概念,以及两种平衡二叉查找树——AVL 树和 Size Balanced Tree(SBTree),并会带你实现 SBTree 的旋转、调整操作,并带你使用 SBT 求解二叉查找树中第 k 大元素,最后需要你用平衡二叉查找树解决一道难题。

    本章包含以下课程内容:章节概述 / 什么是平衡二叉查找树 / 计算二叉查找树的高度 / AVL 树 / AVL 树的演示 / AVL 树的调整 / AVL 树的性质 / Size Balanced Tree / SBTree 的演示 / 计算 SBTree / SBTree 左旋的实现 / SBTree 右旋的实现 / SBTree 调整的优化 / SBTree 调整的实现 / SBTree 求解第 k 小元素 / 蒜头君的小黄鸭

  • 第 13 章堆和优先队列

    堆可以看成是一棵完全二叉树,常见的有大根堆和小根堆。堆广泛应用在计算机中,常见的有利用堆设计的堆排序,以及进程调度等。这一章我们将来学习堆的创建、插入、获取删除堆顶等操作。接着我们来学习由堆实现的数据结构——优先队列,最后我们再用优先队列来解决一道难题。

    本章包含以下课程内容:章节概述 / 什么是堆 / 小根堆的演示 / 堆的性质 / 创建一个堆 / 堆的插入 / 输出堆中元素 / 获取和删除堆顶元素 / 堆排序 / 什么是优先队列 / 优先队列的性质 / 优先队列解哈夫曼编码问题 / 优先队列解哈夫曼编码问题 / 优先队列解哈夫曼编码问题 / 蒜头君的新玩具

  • 第 14 章实验:排位系统

    为了帮助同学们更好的理解并掌握二叉树和堆,我们在这一章设计了一道实验题。首先,我们先会带同学们复习一下时间复杂度的计算方法,然后会简单介绍一下排序算法。之后要求同学们用堆的知识来完成一道实验题——排位系统。

    本章包含以下课程内容:章节概述 / 时间复杂度和排序算法 / 理解时间复杂度和排序算法 / 实验:排位系统

  • 第 15 章森林和并查集

    由若干颗互不相交的树组成的数据结构被称为森林。在本章我们从森林开始讲起,介绍森林的基本概念和遍历方法。之后会讲解一种用于不相交集合的合并运算的数据结构——并查集。并查集通常用森林来实现,并通过记录父节点维护森林的结构信息。最后用并查集解决一道难题。

    本章包含以下课程内容:章节概述 / 什么是森林 / 森林的性质 / 什么是并查集 / 并查集的性质 / 创建一个并查集 / 并查集的查询 / 并查集的合并 / 按秩合并优化 / 路径压缩优化 / 游戏分组

  • 第 16 章图的存储

    图是由一系列顶点和若干连结顶点集合内两个顶点的边组成的数据结构。在本章我们将做一个图的入门,介绍有向图、无向图、度等概念。之后我们会介绍图的两种存储结构——邻接矩阵和邻接表,并动手实现它们。最后解决一道和图相关的难题。

    本章包含以下课程内容:章节概述 / 什么是图 / 图的定义 / 图的常用概念 / 度的计算 / 邻接矩阵和邻接表 / 图存储方法的选择 / 邻接矩阵的构造 / 邻接矩阵的使用 / 邻接表的构造 / 邻接表的使用 / 互粉攻略

  • 第 17 章图的遍历

    从图中某个顶点出发访问到图中每个顶点,且使得每个顶点刚好被访问一次,这一过程被称为图的遍历。本章会介绍两种图的遍历算法:深度优先搜索和广度优先搜索,并在章节的最后运用图的遍历算法解决一道难题。

    本章包含以下课程内容:章节概述 / 图的遍历和生成树 / 图和生成树 / 深度优先搜索算法 / 深度优先搜索的演示 / 深度优先搜索的理解 / 深度优先搜索的实现 / 广度优先搜索算法 / 广度优先搜索的演示 / 广度优先搜索的理解 / 广度优先搜索的实现 / 最短路简化版

  • 第 18 章图论算法入门

    在计算机科学里,图论算法是一类非常重要的算法,很多问题可以转化成图论问题,再用图论算法求解。本章我们将带同学们学习 FloodFill 算法、最小生成树的两种算法和最短路的 Dijkstra 算法,并在最后用 Dijkstra 算法解决一道最短路难题。

    本章包含以下课程内容:章节概述 / 连通分量和 FloodFill 算法 / Floodfill 算法演示 / 连通分量 / FloodFill 算法的实现 / 最小生成树和 Prim 算法 / Prim 算法演示 / 计算最小生成树 / Prim 算法的实现 / Kruskal 算法 / Kruskal 算法演示 / 最短路问题 / Dijkstra 算法演示 / 计算最短路 / Dijkstra 算法的实现 / 蒜头君回家吃饭

  • 第 19 章实验:高速路网设计

    为了帮助同学们更好的理解并掌握最小生成树和最短路,我们在这一章设计了一道实验题。首先,我们先会带同学们复习一下最小生成树以及 Prim 算法和 Kruskal 算法,然后会复习一下最短路问题中的单源最短路问题以及 Dijkstra 算法。之后要求同学们用最小生成树和最短路的知识来完成一道实验题——高速路网设计。

    本章包含以下课程内容:章节概述 / 图论基础算法复习 / 图论基础算法理解 / 实验:高速路网设计

  • 第 20 章查找算法

    查找操作是数据处理中使用最频繁的一项操作。在本章中,会介绍两种查找算法:顺序查找和折半查找,并带同学们实现这两种算法。除了介绍算法本身,还会介绍比较算法性能的一个重要指标:平均查找长度,并教同学们分析不同查找算法的平均查找长度。在本章的最后要用折半查找算法解决一道难题。

    本章包含以下课程内容:章节概述 / 查找算法 / 查找算法的基本概念 / 计算平均查找长度 / 顺序查找 / 理解顺序查找算法 / 顺序查找的实现 / 折半查找 / 理解折半查找 / 折半查找的实现 / 三分查找 / 理解三分查找 / 三分查找的实现 / 报数游戏

  • 第 21 章排序算法

    在计算机科学中,排序算法是能将一串数据依照特定排序方式进行排列的算法。排序算法在工程中有大量的应用,也是很多基于有序性的算法的前提。虽然排序算法是一个简单的问题,但前人在这个问题上有大量的研究,也产生了很多种不同的排序算法。在本章中,会为你讲解几种最常用的排序算法,并带你实现它们。在本章的最后,要用排序算法解决一道难题。

    本章包含以下课程内容:章节概述 / 排序算法 / 排序算法的基本概念 / 稳定排序算法 / 求解稳定排序 / 插入排序的演示 / 插入排序的实现 / 冒泡排序的演示 / 冒泡排序的实现 / 归并排序的演示 / 归并排序的实现 / 不稳定排序算法 / 选择排序的演示 / 选择排序的实现 / 快速排序的演示 测试修改 / 快速排序的实现 / 新报数游戏

课程评价与奖励

完成这门课程(获得“已完成”的成绩)后,你可以与 icfr@jisuanke.com 分享你的学习经历、体会和感受,帮助我们对教学进行进一步的改进。参与分享活动同学,可以换取以下任意一门相关课程半个月的五折折扣券,继续接下来的学习。

本课程为 2016 年秋季课程,现已下线。注册课程请点击下面的链接访问最新学期的课程。 访问最新课程(C++ 版) 访问最新课程(C 语言版)

请输入由老师提供的课程码

×

使用预购学习点选课

×
你确定以 6300 学习点 / 周的费率开始学习《数据结构(2016 年秋季学期课程)》吗?
折扣券兑换码可以在“管理折扣券”中进行兑换

余额不足

×

欠费

你的账户正处于欠费状态!你的账户每天消耗 {{ dailyCost }} 学习点,因此账户余额应超过 {{ dailyCost * 7 }} 学习点方可解除欠费状态(查看详情)。请及时充值解除欠费状态,恢复正常学习!

学习点余额:{{ balance }},还需充值:{{ dailyCost * 7 - balance }}

购买套餐

你当前有正在使用的折扣券,购买套餐后,折扣券将失效,是否继续购买?