可能你之前经常在很多地方看到有人讨论数据结构与算法,但对于他到底是一个什么样的东西,一直是云里雾里的,特别是对于那些从其他行业转到编程领域的人来说,数据结构和算法他的概念就会更加模糊了,
那么数据结构和算法到底指定是什么东西呢,我们到底有没有必要学习数据结构和算法呢?因为似乎我们学习编程过程中,似乎没有必要了解这些,我们只是在学习一门语言的 基本语法/高级语法。然后通过他的一些语法去做出来一些界面效果,特别是对于前端来说,我们只需要学习它的语法然后去结合一些框架和库就可以达到这个目的,当然它其中可能包括一些复杂的逻辑结构,我们只需要把我们是思维转化为代码,来实现复杂的逻辑结构就可以了,那数据结构和算法是什么? I don't care
,我不关心,我只需要完成上面给我的任务,而且我完成的非常好,那不就可以了吗?数据结构和算法什么的我并不需要,确实如果我们只是想了解语言的应用层面,那么数据结构和算法显得没那么重要但是如果我们希望了解语言的设计层面,那么数据结构和算法就很重要了
1,什么是数据结构
数据结构其实没有官方的定义,那我们就看几种比较权威的民间定义
数据结构式数据对象,以及存在于该对象的实例和组成实例的数据元素之间的各种联系。这些联系可以通过定义相关的函数来给出
---《数据结构,算法与应用》
数据结构是ADT(抽象数据类型 Abstract Data Type)的物理实现
---《数据结构与算法分析》
数据结构(data structure)是计算机储存,组织数据的方式。通常情况下,精心选择的数据结构可以带来最优效率的算法。
---维基百科
我们这里需要注意一点,所有关于数据结构的定义都会和一个词联系起来算法
,这是因为所有数据结构的定义和实现都离不开算法,后面的文章我们还会详细介绍算法,它和数据结构同样重要
下面我们从自己的角度来认识数据结构吧,其实数据结构就是在计算机中储存和组织数据的方式,我们知道,计算机中数据量非常庞大,那如何以高效的方式组织和存储呢?
这就好比一个庞大的图书馆中存放了大量的书籍,我们不仅仅要把书放进入,还应该在需要的时候能够轻松的取出来,所以我们就应该以合理的方式来组织这些图书(数据)才能达到一个比较好的效果,下面我们就以图书馆这个例子展开说明
我们应该怎样摆放图书呢,这个应该是跟数据量有关的
-
比如说我们的书籍相对较少
-
那假如你有一家书店,书籍数量相对较多,
-
假如你有一家图书馆,书籍量相当庞大
最终图书摆放要使得两个相关操作方便实现
- 新书怎么插入?
- 怎么找到某本指定的图书?
以下列举出几种方式
方法1:随便放
- 插入:哪里有空放哪里,一步到位!
- 查找:找某本书,累死.....
方法2:按照书名和拼音字母顺序排放
- 插入:新进一本《阿Q正传》,按照字母排序放到相应位置
- 查找:首先找到首字母区域,然后这个较小的区域中查找(二分查找法)
方法3:将书架划分为几块区域按照类别存放,类别中按照字母排序
- 插入:先定类别然后按照字母排序放到相应位置
- 查找:先定类别,再二分查找
结论:当你准备去解决一个问题,解决问题的效率是和数据的组织方式有关,数据结构直接影响到你解决问题的效率,一个好的数据组织方式是你解决问题的关键
下面我们先看下编程中常见的集中数据结构
常见的数据结构较多,每一种都有其对应的应用场景,不同的数据结构的不同操作性能是不同的,有的查询性能很快,有的插入速度很快,有的是插入头和尾速度很快,有的做范围查找很快,有的允许元素重复,有的不允许重复等等,在开发中要根据具体的需求来选择
PS:数据结构和算法是和编程语言无关的,而常见的编程语言都有直接或间接的使用我们上述所说的数据结构,比如
javascript
中的Array
,Set
,Map
,Object
等等。之前我们一直是以API使用者的身份去使用他们,如果我们更加想要了解它们的底层,数据结构和算法的学习是不可或缺的,个人非常喜欢的一句话,了解真相你才能获得真正你的自由
,了解底层实现后,你在用这些东西的时候你才能更加自由,更加的得心应手和灵活,死记规则你只能漂于表面
2,什么是算法
算法(Algorithm),在之前的学习中,我们可能已经学习过几种排序算法,并且知道不同的算法执行效率是不一样的,也就是说解决问题的过程中,不仅仅数据的存储方式会影响效率,算法的优劣也会影响着效率,那么到底什么是算法呢?
数据结构是组织和存储数据的一种方式,而算法就是解决问题的办法,解决问题的步骤,解决问题的逻辑,解决问题我们采用的一步一步的操作
算法的定义:
- 一个有限指令集,每条指令的描述不依赖于语言
- 接受一些输入(有些情况下不需要输入,视情况而定)
- 产生输出
- 一定在有限步骤之后终止(不应该是一个死循环)
算法通俗理解:Algorithm这个单词本意就是解决问题的办法/步骤逻辑,数据结构的实现,离不开算法
举例
电灯不工作的解决算法
这就是解决电灯不工作的算法(步骤)
结论:我们如果想要解决某个问题一定是按照某个步骤,一步一步去完成的,而这些步骤综合起来就是我们解决这个问题它算法
·