了解和学习一种知识的最好方法是带着相关的问题去探索,当咱们把一些常见的问题所有解答了,咱们也就能对这种事物有一些初步的了解了。试着回答下面的几个问题,让咱们对数据结构和算法有一个基本的认识吧。前端
从字面意思来理解就是一种数据的多种表现方法,什么是结构——由组成总体的各部分的搭配和安排(百度百科)。个人理解是:数据的排列,不一样的数据结构就是数据的多种排列形式,而后根据排列的状况咱们一般用一个学名来表示它,好比说:数组,集合,树,图等。git
当咱们了解了数据结构以后,在实际的编程过程中,咱们遇到某一类的数据的时候,咱们就可以找到一种最合适的数据结构来表示他们了。这样再处理跟数据相关问题的时候就会变得高效,由于肯定了数据结构,咱们也就肯定了针对该结构的数据,使用那些方法来对数据进行相关的操做了。好比说,咱们须要一种数据结构来记录天天的天气状况,当咱们说到某一天的时候,就能马上知道当天的天气是怎么样的时候咱们能够用一个数组来表现。又如,咱们要描述一个家族的族谱的时候,用树型结构比较合适;描述一我的的年龄,身高,体重,民族,学历这种用集合比较合适;描述排队的状况用队列。github
最经常使用的应该有两种了:数组,对象。到了ES6又增长了两种新的数据结构Set和Map,其实Set和Map应该算是数组和对象的一种变种,但总的来讲它们又是另外两种类型的数据结构;算法
数据结构只不过是咱们描述数据的一种手段,但咱们最终的目的一般是对这些数据进行相关的操做,好比:添加,删除,查找,排序等。所谓的算法就是如何去实现这种操做的一种计算方式。但算法每每不止一种,有道是条条道路通罗马,一般要达到某种目的,咱们可能会有不少种的算法。好比一个数组咱们要给他进行去重,就有不少种方法。你能够循环遍历,把每一个值跟其余的值比较一遍,也能够把数组转成Set结构的数据。编程
上面说到实现某种操做的方法有不少种,可是哪种是最好的,咱们要如何判断呢。咱们能够经过算法的执行时间对吧,那种算法执行的速度越快,固然那种算法就最好。但计算机当中,还要考虑到算法的空间复杂度,也就是算法执行过程中,可能占用的内存空间,一个算法执行的速度很是块,但执行的时候,须要1T的内存空间,这就不行。因此好的算法每每有两个条件:数组
我还有个第三点,那就是代码便于理解,但这部分优秀的算法,每每涉及到不少数学相关的问题,若是没有这部分相关的概念,理解起来是很是不容易的。数据结构
涉及到前端数据结构和算法的一些学习笔记,我放到了github上面,内容还在更新,尽可能一周分享一个,欢迎你们一块儿来讨论并参与分享,github地址以下:数据结构和算法