继续浏览精彩内容
慕课网APP
程序员的梦工厂
打开
继续
感谢您的支持,我会继续努力的
赞赏金额会直接到老师账户
将二维码发送给自己后长按识别
微信支付
支付宝支付

1-玩转数据结构-欢迎学习数据结构

慕姐8265434
关注TA
已关注
手记 1147
粉丝 221
获赞 1064

欢迎大家学习新课程: 玩转数据结构

  • 为什么要学习数据结构?

数据结构是所有计算机专业的同学必学的课程

  • 数据结构研究的是数据如何在计算机中进行组织和存储,使得我们可以高效的获取数据或者修改数据。

为了在不同场景下高效获取或修改。我们就发明了不同的数据结构。

整体而言,数据结构可以分为三种:

线性结构; 树结构; 图结构;

mark

mark

本节课带领大家从零开始深入数据结构。学完课程对于大多数的名词都有认识,以及从底层实现出来。

对于数据的存储这个任务,解决方案是很多的。我们需要根据应用的不同,灵活选择最合适的数据结构

在计算机的世界中,数据结构无处不在。

mark

mark

通常我们使用数据库,数据库是一个封装好的软件,我们只需要通过sql语句进行访问。

mark

mark

我们创建一个数据库,底层需要数据结构。

mark

mark

没有这些树和哈希表的知识,我们是无法创建出数据库软件的。

操作系统: 快速在多任务间切换

mark

mark

递归调用使用系统栈来实现。优先队列进行任务切换。

文件压缩:

各种各样的格式,png mp3等都是进行了一定程度的压缩,形成了格式。

mark

mark

最简单常用的压缩方式就是哈夫曼树。现代的压缩算法需要更先进的数据结构

通讯录: 设置通讯录软件,存储不同的联系人,使用链表进行实现。

当联系人变多之后,查找一个联系人变成了一个很慢的操作。手持设备本身就效率低下。被一个实习生解决,使用了一种叫做Trie - 前缀树的数据结构

mark

mark

不管通讯录中有多少人,这个查找联系人操作都变成了毫秒级别的。

大量的算法,以数据结构为基石。

游戏设置大量的算法,寻路算法,最短路径。

图论算法: DFS(深度优先遍历) 使用栈, BFS(广度优先遍历) 使用队列; 几乎所有的算法都要以数据结构为基石。

数据结构 + 算法 = 程序

几乎任何一本算法教材,都包含大量的篇幅讲解数据结构

课程设置

针对数据结构零基础的同学,需要掌握java语言基础(课程使用)

数据结构不应该局限于特定的语言。

java: 推广度高,大多数同学都会。 java是一门完全面向对象的语言。

这种面向对象的特性,非常适合我们进行数据结构的研究。

对于数据结构中我们要实现的大多数内容都是一个名词,链表,队列,栈,二叉树,哈希表都是一个名词,在这个名词上赋予不同的操作,这样的设计思路非常符合面向对象的设计原则。

不仅仅会收获数据结构知识,对于面向对象的设计,java语言中对于面向对象设计相应的语言支持特性理解深入。

鼓励同学们使用其他语言实现这个课程的代码。 只要你所选择的语言,支持面向对象的范式的语言,C++ PHP swift python等

这样做的同学会有双份的收获。数据结构+语言

课程中主要涉及到12种数据结构

mark

mark

课程对于每种数据结构不仅仅是简单实现而已,很多时候一种数据结构是有多种实现的,会对多种不同的实现进行比较。

链表: 单链表,双链表; 哈希表: 两种不同实现; 并查集: 一步一步的优化,完成好几个版本

递归与非递归的算法实现

本课程不包含图结构,图论领域以算法为主

对于图结构而言,本身存储一个图是非常简单的,简单线性表就可以。

图论领域庞大,算法为主。如 计算最小生成树,计算最短路径,计算最大联通分量等都是要有算法支撑的。

起步的时候讲解的都是非常基础的数据结构。

mark

mark

面向基础: 什么是递归;调试; 简单的复杂度分析(包含均摊复杂度分析), 所有数据结构,手把手的底层实现,创建属于自己的小型数据结构库。

数据结构 + 编程水平 + 自己拓展; 数据结构背后思考: 强调比较和优化

  • 面向面试的数据结构:

mark

mark

前六个都是非常基础的数据结构, 同时也是笔试面试中的常客,这六个里面的操作,算法逻辑,要能达到白板编程(手写代码)。

  • 面向竞赛的数据结构: 线段树,Trie,并查集

数据结构领域的灵活性,只是处理对象发生了变化,就可以设计出新的更优秀的数据结构。

面试和竞赛,不止会讲底层实现,会讲面试和竞赛真正的使用这些数据结构来解决的问题(LeetCode获取的问题)。

mark

mark

最后三章: AVL 红黑树 哈希表

前两个都是平衡二叉树的实现,哈希表也是一种非常常用的数据存储的结构,相对而言复杂,代码量大。

一般这三个面试时会提问一些概念性的或者性能分析上的问题。红黑树虽然是个平衡二叉树,但不是完全平衡二叉树,哈希表的冲突检测相关,性能分析。

课程从零开始搭建三种数据结构,并且分析蕴含在这三种数据结构中的问题。(大多时候调用标准库)

希望同学们通过这门课真正玩转数据结构

学习数据结构(和算法) 到底有没有用?

这门课(玩转数据结构) 和 那门算法与数据结构的区别下节谈。

大多数同学疑惑: 为什么我觉得数据结构没有用?

  • 学习数据结构有什么用?

为什么我在工作中,用不到数据结构(和算法)?在工作中用不到数据机构 (和算法), 所以它们没用?数据结构(和算法) 主要是为了应付面试或者考试用?

答案:也对,也不对。

软件开发过程越来越简单。

mark

mark

这些操作系统,软件包等里面包含大量的数据结构的应用,但是我作为一个ios开发者可以对这些一无所知,只需要使用工具以及提供的api开发出一个app。



作者:天涯明月笙
链接:https://www.jianshu.com/p/bf9c4efe11ff


打开App,阅读手记
4人推荐
发表评论
随时随地看视频慕课网APP