数据结构与算法是一个达到高级程序员的敲门砖。当你脱离了语言的应用层面,去思考他的设计层面时,你就依旧已经开始初识数据结构与算法了
数据结构
什么是数据结构
对于数据结构的定义官方并没有统一的解释,在各个百科以及算法的书中,对于数据结构的定义有着不同的话术描述
为什么需要数据结构
假设这样三个场景:
- 在你的家里有一个书架
这种情况的时候,我们对于书籍的摆放和整理也许并不太关系,只需简单放入书架即可,在我们需要的时候一扫书架就能找到我们想要的书籍。 - 你有一个专门存放书籍的书屋
这种情况我们就不能像第一种场景一样随意摆放书籍了。我们可以按照书的名字按照字母顺序进行摆放,当我们需要找到某本书的时候,我们可以根据书名字母进行快速查找。 - 你有一个海量书籍的图书馆
这种情况下,如果简单按照字母排序也会难以查找了。相同字母名称的书籍可能会有很多,这个时候我们可以根据书的类型进行分类摆放,在针对每个类型进行书名字母的摆放。
在上面场景中,每本书都可以看作一个数据点,不同的摆放形式查找起来会有不同效率。每种摆放形式就可以看作一种简单的数据结构。而查找的方法与过程就可以看着算法的实现。
常见的算法
队列(Queue)
,
树(Tree)
,
堆(Heap)
,
数组(Array)
,
栈(Stack)
,
链表(Linked List)
,
图(Graph)
,
散列表(Hash)
…
不同的数据结构对于不同的操作,性能上也大不相同。
有的查找很快,有的增加删除很快,有的不允许元素重复,有的允许元素重复。
记住:没有最好的数据结构,只有最合适的数据结构!
算法
什么是算法
算法必须具备以下特点:
- 明确定义:算法应该有确定的输入和输出,以及明确的计算步骤,使其在任何情况下都能产生正确的结果。
- 有限性:算法必须在有限的时间内完成运行,并且不能陷入无限循环。
- 可行性:算法应该是可行的,也就是说,它应该能够在现有的计算机系统上实际实现和执行。
- 通用性:算法应该是通用的,可适用于解决一类或多类问题,而不仅仅是特定的输入实例。
通俗来说,算法就是解决问题的步骤集合。
可能对于javascript来说,我们似乎很少接触到数据结构与算法,因为更多的时候我们都是api的使用者,并不在乎底层的实现。
例如我们经常在javascript里使用的数组,其实他并非真正的数组结构,而是模仿哈希列表出的一种数据结构而已,不了解数据结构你就永远不知道真相
了解真相才能获得真正的自由!
本系列很多内容会源自B站codewhy老师的主页视频