00|重学数据结构篇

数据结构的定义

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

为什么要学习数据结构

数据结构是所有计算机专业学生必修的课程。以我自己为例,我本科并不是计算机专业,但是我的专业隶属于计算机科学学院,数据结构和算法设计与分析是必修的专业课程,要知道,我本科大部分时间都只是在实验室玩玩单片机,搭搭智能小车。大部分同学,在通过数据结构与算法期末考试后,就再也没有拿起这两本教材。

在这里插入图片描述

算法的重要性不言而喻,而近乎任何一本算法教材,都包含大量的篇幅讲解数据结构。

相信对数据结构与算法有一定了解的同学来说,对如下的等式并不陌生:“数据结构 + 算法 = 程序”。这是 Niklaus Wirth 在 1976 年写的一本书,这本书强调了数据结构和算法是内在联系的,在当时是最有影响力的计算机科学著作之一。

App 开发的门槛越来越低,一个简单功能的 App,一个毫无开发经验的同学,跟着视频的讲解或者工具书的学习,从无到有的开发出一款功能简易的 App 可能只需要几天甚至更短的时间。我在几天的时间里,通过看《第一行代码》一书,就可以开发出一款能满足基本功能需求的智能家居客户端 App,能够基于开源项目修改定制一款自己的蓝牙 App。

在这里插入图片描述

苹果的 WWDC 让我们见到了最年轻的开发者和最年长的开发者,不禁让我们内心发问:开发一款 App 或许并不需要数据结构与算法?真的有必要花大量精力系统的学习数据结构和算法吗?几个月的培训,就可以找到一份薪水还可以的研发岗位,这样的案例非常常见。

在我看来,简单的功能对数据结构和算法的要求几乎没有,或者要求不高,业务能力强的工程师,能够开发出一款功能非常丰富的 App。但是,随着用户量、数据量的剧增,没有优秀的数据结构作为支撑,App 的性能、用户体验等将会大大折扣。

一个通讯录软件,当联系人上千或者上万时,如何在硬件性能较差的设备上快速的搜索联系人?需要什么样的数据结构来组织和存储数据?

对于非计算机专业人员,工作的重心在于软件的创意、产品体验、业务逻辑等方面,对数据结构的要求并不高。应聘大公司的岗位,需要同学们拥有扎实的数据结构和算法功底,大公司需要能够解决计算机科学方面的问题。数据结构和算法不扎实,将会是限制一名技术研发人员持续成长的天花板。
在这里插入图片描述

数据结构的分类

数据结构可以为分:线性结构、树结构和图结构。
在这里插入图片描述
每一种结构类型,都拥有许多的应用实例。
在这里插入图片描述

数据结构的应用

在计算机的世界里,数据结构无处不在。数据库的实现会使用到 B+树这种数据结构;Redis 的 sortedset 使用到了跳表;操作系统的进程调度使用到了优先队列;文件压缩会应用哈夫曼树等等。
在这里插入图片描述

大量的算法,以数据结构为基石。以游戏中的寻路算法为例,深度优先遍历和广度优先遍历都需要数据结构的支持。

在这里插入图片描述

随便说了这么多,从下一篇文章开始,对于每一个具体的数据结构,就一个一个的学习吧。

PS:关注微信公众号「蓝本本」,和我一起学习、进修和放纵好奇心。

拓展

1.	[玩转数据结构 从入门到进阶-慕课网实战] 

https://coding.imooc.com/class/207.html

2.	[学算法有什么用?唉,对你来说,可能真没用]

https://mp.weixin.qq.com/s/D9Y8KgkgKrH4hPMTw-fD0w

3.	10-year-old Bay Area boy is youngest app developer at Apple’s WWDC

https://abc7news.com/wwdc-apple-app-developer-apps/5336352/

4.	Algorithms + Data Structures = Programs

https://en.wikipedia.org/wiki/Algorithms_%2B_Data_Structures_%3D_Programs

5.	Why Redis SortedSet uses Skip List instead of Balanced Tree?

https://stackoverflow.com/questions/45115047/why-redis-sortedset-uses-skip-list-instead-of-balanced-tree

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章