数据结构和算法之间到底是什么关系?
编程好比是一辆汽车,而数据结构和算法是汽车内部的变速箱。一个开车的人不懂变速箱的原理也是能开车的,同理一个不懂数据结构和算法的人也能编程。但是如果一个开车的人懂变速箱的原理,比如降低速度来获得更大的牵引力,或者通过降低牵引力来获得更快的行驶速度。那么爬坡时使用1档,便可以获得更大的牵引力;下坡时便使用低档限制车的行驶速度。回到编程而言,比如将一个班级的学生名字要临时存储在内存中,你会选择什么数据结构来存储,数组还是ArrayList,或者HashSet,或者别的数据结构。如果不懂数据结构的,可能随便选择一个容器来存储,也能完成所有的功能,但是后期如果随着学生数据量的增多,随便选择的数据结构肯定会存在性能问题,而一个懂数据结构和算法的人,在实际编程中会选择适当的数据结构来解决相应的问题,会极大的提高程序的性能。
我自己的理解是:算法是解决问题的方法,而使用不同的数据结构导致不同的解决方法,对于特定的问题使用特定的数据结构的算法有更好的效率,学数据结构和算法就是为了指导在面对不同问题时,能找到最佳的数据结构实现最优算法。衡量算法的好坏用时间和空间复杂度表示(O记法),数据结构影响的就是时间复杂度和空间复杂度。
结合我自己的经验慢慢地理解数据结构,可能会有不完备的地方,望不断完善
1. 从宏观角度/单纯使用数据结构角度/JAVA已经写好了的数据结构角度来看:
单纯地考虑使用数据结构编程时,只需要了解不同数据结构的特点,适合的使用场景就足够了,Java中已经定义好了这些数据结构的方法,直接调用就行。
此处接下来要讲不同数据结构的特点和使用:
HashMap的基本原理:https://www.cnblogs.com/yuanblog/p/4441017.html
“字典”这一概念,hashcode相当于给value加了个索引,拿着索引去查速度很快,就像通过字典最前面的索引去查字一样方便。
2. 从最基本的数据结构来实现其他数据结构的角度/自主构建数据结构(一般限于基础的几个数据结构)
数组Arrays本身就是一种最简单的线性数据结构,可以根据需要改造成其他任何高级数据结构,比如Arraylist,链表,堆(二叉树),栈,队列,hashmap等等
然后又了解可以用链表更快地实现栈和队列。
这个角度更多的是从最基本的数据结构数组出发实现其他数据结构,考察的是基础的编程思想和能力,经常在算法考试题中出现。