目录
一.数据结构和算法概述
1.1数据结构概念
概念:
数据结构是一门研究非数值计算设计问题中的操作对象。已经他们之间的关系和操作的学科。(把数据元素按照一定关系组织起来的集合,用来组织存储数据)
1.2数据结构分类
逻辑结构
逻辑结构是具体问题抽象出来的模型, 是抽象意义上的结构,按照元素之间的相互关系分类。
a.集合结构:集合结构中数据元素除了属于同一个元素外,他们之间没有任何其他的关系。
b.线性结构:线性结构中的数据元素之间存在一对一的关系。
c.树形结构:树形结构中的数据元素之间存在一对多的层次关系。
d.图形结构:图形结构的数据元素是多对多的关系。
物理结构分类
逻辑结构在计算机中真正表示方式称为物理结构,也可以叫存储结构。
常见物理结构有:顺序存储结构、链式存储结构。
顺序存储结构:
把数据元素放到地址连续的存储单元里面,其数据间的逻辑关系和物理关系是一致的,比如我们常用的数组就是顺序存储结构。
弊端:插入或删除数据时,整个结构都需发送变化。
链式存储结构:
把数据元素放在任意的存储单元里,可以是连续也可以是不连续。数据元素之间不能放映逻辑关系,因此在链式存储结构中引进了一个指针存放数据元素地址,通过地址找到相关元素位置。
1.3算法概念
概念:
根据一些条件把数据进行计算求出结果。
算法的目标
1.花最少的时间完成需求;
2.占用最少的内存空间完成需求;
1.4算法初体验
案例一:
计算1到100的和。
第一种算法:
public static void main(String[] args) { int sum = 0; int n=100; for (int i = 1; i <= n; i++) { sum += i; } System.out.println("sum=" + sum); }
第二种算法:
public static void main(String[] args) { int sum = 0; int n=100; sum = (n+1)*n/2; System.out.println("sum="+sum); }
分析:
第一种算法需要执行100次加法运算,第二种算法执行一次运算。节约时间
案例二:
计算10的阶乘
第一种解法:
public class Test { public static void main(String[] args) { //测试,计算10的阶乘 long result = fun1(10); System.out.println(result); } //计算n的阶乘 public static long fun1(long n){ if (n==1){ return 1; } return n*fun1(n-1); } }
第二种解法:
public class Test { public static void main(String[] args) { //测试,计算10的阶乘 long result = fun2(10); System.out.println(result); } //计算n的阶乘 public static long fun2(long n){ int result=1; for (long i = 1; i <= n; i++) { result*=i; } return result; } }
分析:
第一种解法使用递归完成,fun1方法会执行10次,并且第一次执行未完毕,调用第二次执行,第二次执行未完毕调用第三次,,,需要栈内存开辟10块内存分别执行10个方法。
第二种解法调用for循环完成需求,fun2只会执行一次,栈内存只需开辟1块内存。占用内存空间更小。
小结
数据结构:逻辑结构、物理结构(顺序存储,链式存储)。
算法目的:节约时间及内存空间。