一、数据结构(Data Structure)
1. 概念:
表示一组数据在计算机中是如何存储的,指相互之间存在一种或多种特定关系的数据元素的集合。
2. 分类:
① 逻辑数据结构:反映数据对象中数据元素之间的相互关系,与具体如何存储无关。
集合结构:集合结构中的数据元素除了同属于一个集合外,它们之间没有其他关系。
线性结构:线性结构中的数据元素之间是一对一的关系。
树形结构:树形结构中的数据元素之间存在一种一对多的层次关系。
图形结构:图形结构的数据元素是多对多的关系。
② 物理数据结构:指数据的逻辑结构在OS(操作系统)中的存储方式。
顺序结构:是把数据元素存放在地址连续的存储单元里,其数据间的逻辑关系的物理关系是一致的(例如数组)
链式结构:是把数据元素存放在任意的存储单元里,这组存储单元可以是连续的,也可以是不连续的(链表)
二、算法:
1. 概念:
算法是解决特定问题求解步骤的描述,在计算机内表现为指令的有限序列,并且每条指令表示一个或多个操作。简单来说,算法就是使用特定的数据结构操作数据的一组方法。
2. 特性:
① 输入:算法有零个或多个输入;
② 输出:只有一个或多个输出;
③ 有穷性:算法在执行有限的步骤之后自动结束而不会出现无限循环,并且一个步骤在可接受的时间内完成;
④ 确定性:算法的每个步骤都有确定含义,不会出现二义性;
⑤ 可行性:算法的每一步必须是可行的,即每一步都能通过执行有限次完成。
3. 设计:
① 正确性;② 可读性;③ 健壮性;④ 时间效率高;⑤ 空间使用率低;⑥ 实现简单。
案例:斐波那契数列的实现
package fibonacciSequence;
public class Fibo {
public static void main(String[] args) {
for(int i = 1; i < 10; i++) {
System.out.print(fibo(i) + " ");
}
}
public static long fibo(long n) {
if(n < 0) {
throw new IllegalArgumentException("fibo n must be more than 0");
}
if(n == 1 || n == 2) {
return 1;
} else {
return fibo(n-1) + fibo(n-2);
}
}
}