像一些大型的一线,二线互联网公司很喜欢问算法,特别是头条,其实学好数据结构与算法,对你思维能力和代码质量是有很多的提高,还有就是Java中的集合底层原理都是使用了某个数据结构,如果不懂数据结构的话,问下集合中的几个就懵逼了,虽然我们不是算法工程师,但是基本的数据结构与算法还是要懂的,那么什么是数据结构呢?
定义
数据结构是一门研究非数值计算程序设计中问题中的操作对象,以及他们之间的关系和操作等相关问题的学科.
通俗的来讲就是研究数据元素之间的关系存在一种或者多种特定关系的集合
传统上把数据结构分为物理结构和逻辑结构
逻辑结构:是指数据对象中数据元素之间的相互关系 体现在时间上
物理结构:是指数据的逻辑结构在计算机中存储的形式 体现在空间上
逻辑结构有四种
1:集合结构 集合中的数据元素除了同属于一个集合外,他们之间没有其他的关系
2:线性结构 线性结构中的元素是一对一的关系
3:树形结构 树形结构中的元素数据之间存在一种或者多种关系
4: 图形结构 图形结构中的数据元素之间是多对多的关系
上面讲了几种逻辑结构,下面讲下物理结构,物理结构主要是讲数据存储在内存中的结构
数据元素存储的结构形式有二种,
第一种是:顺序存储 是把数据元素存放在地址连续的存储单元中,其数据间逻辑关系和物理关系是一样的 比如List集合底层
第二种: 链式存储 是把数据元素存放在任意的存储单元里 ,这个存储单元可以是连续也可以是不连续的
比如1号除了存储自己的值外还要存储下一个对象元素的指针 就是内存地址值
总结
常见的数据结构
上面是我们平时常见的数据结构,其实使用最多的还是数组 栈 队列比较多,说完了数据结构,就要说下算法了
举例说明
比如我们小时候学的从1加到100,
package interview;
public class Test {
public static void main(String[] args) {
fun1();
fun2();
}
public static void fun1(){
int n = 100;
int sum = 0;
for(int i=1;i<=n;i++){
sum+=i;
}
System.out.println("结果:"+sum);
}
public static void fun2(){
int sum = (1+100)*50;
System.out.println("结果:"+sum);
}
}
这fun1和fun2都是计算从1加到100的后的结果,我们对比下fun1有个for循环,这个循环100次,加上前面的二行代码,计算机要执行102次,而fun2就执行了一行代码,那么计算机肯定花的时间要比fun1时间要快,比如说不是求1到100的值, 而是求1到n的值,那么问题来了,第二个算法效率更高,那么第二个算法的时间复杂度就是O(1), 而第一个算法的时间复杂度就是O(n)
学好数据结构与算法贵在坚持和思考,这不是一天或一个星期能学好的,坚持每天学点.