数据结构
    计算机当中的算法,本质就是一系列程序指令,用以解决特定的运算和逻辑问题
    而所谓数据结构,是数据的组织、管理和存储格式。简单理解的话,数据结构就是执行算法的“原材料”。
    俗话讲,巧妇难为无米之炊。算法,就好比是聪明勤劳的女主人,而数据结构,就是用来做饭做菜的柴米油盐。
    数据结构大总结 - 图1
    数据结构都有哪些组成方式呢?
    首先,是线性结构。
    但凡有过一点编程基础的小伙伴,肯定都知道数组,这就是一种典型的线性数据结构。
    数据结构大总结 - 图2
    除了数组以外,链表也是一种重要的数据结构。Java集合框架中的LinkList类,底层实现就是链表。
    数据结构大总结 - 图3
    以数组或者链表为基础,可以封装出两种数据结构,一个是栈,它的特点是先进后出;另一个是队列,它的特点是先进先出。栈和队列,可以满足不同的特定需求。
    数据结构大总结 - 图4
    数据结构大总结 - 图5
    其次,是树。
    树,是一类一对多的数据结构,天生就非常适合用来检索。Java集合框架当中有一个TreeMap类,用于存储键和值的映射,不但查找很高效,还能保证键的有序排列。它的底层实现就是一种名为红黑树的特殊二叉树。
    数据结构大总结 - 图6
    另外,操作系统当中的文件索引,有很多都是用B树实现的。
    数据结构大总结 - 图7
    而常用的MySQL数据库,以B+树作为常用索引。
    数据结构大总结 - 图8
    再其次,是图。
    图,是一类多对多的数据结构,非常适合用于表述众多对象之间的复杂关系。大家肯定都乘坐过地铁,一个城市的地铁交通线路,站与站之间形成的关联,就是一个图结构。
    数据结构大总结 - 图9
    在一群人之间,有着复杂的人际交往关系,他们所形成的的关系网络也是一个图结构。
    数据结构大总结 - 图10
    在图的基础上,产生了许多实用的算法。比如,用百度地图或者高德地图进行导航的时候,背后就是图的最短路径算法。
    最后,还有一些复合数据结构。
    比如咱们常用的哈希表,它的组成就是数组和链表的结合。
    数据结构大总结 - 图11
    还有一种比较有意思的数据结构叫做跳表,它在普通链表的基础上,增加了很多个索引层。Redis当中的集合 sortedSet,背后的数据结构就是跳表。
    数据结构大总结 - 图12
    复合数据结构,往往结合了多种基础数据结构当然优势,在特定的场景下非常有用。
    这就是数据结构的几种组成方式,大家可以把这张图保存一下。由于篇幅原因,图里面所列出的具体数据结构,只是最最常用的几种,并非全部。
    数据结构大总结 - 图13