数据结构概论

数据结构就是了解数据存储在内存中的顺序和位置关系;算法就是为求解一个问题锁需要遵循的、被清楚指定的
简单指令的集合。数据结构是为算法服务的,算法是要作用在特定的数据结构上的。

常见的数据结构与算法:

数据结构:数组、链表、栈和队列、散列表hash、二叉树、堆、跳表、图
算法:递归、排序、搜索、哈希、贪心、分治、回溯、动态规划、字符串匹配

递归问题:

1、待求解的问题可以分解为几个子问题的解;2、待求解问题与分解后的子问题只有数据规模不同,求解思路一
致。3、存在递归终止条件
问题:假设有n 级台阶,人可以每步跨1 级或者2 级台阶,上这n 级台阶有多少种方法
思路: f(n)=f(n-1)+f(n-2) 终止条件f(1)=1 f(2)=2
编程实现:找到将大问题分解为小问题的规律,并且基于此规律写出递推的公式,然后推敲终止条件,最后将递
推公式和终止条件翻译成代码
问题


数组

数组就是一组相关类型的变量集合,这些变量可以按照统一下标的方式进行操作,是一种典型的线性表结构
特性:
- 随机访问。支持在O(1)按照下标快速访问元素
- 插入和删除数据可能会有数据移动问题。时间复杂度O(n)
- 警惕数据访问越界问题ArrayIndexOutOfBoundsException
数组的基本使用
- 声明。int[] arr 或者int arr[]
- 分配空间。数组空间是连续的,arr=new int[10],java 不支持变长数组,如果需要变长则需要自行编程实现
- 赋值。元素默认值
- 处理。可以通过下标对数组元素进行操作


数据结构概论

基本数据结构3 种:线性表、树、图
线性表
线性表是一种线性结构,是由零个或者多个数据元素构成的有限序列。
特征:除了头尾元素,每个元素有且仅有一个直接前驱和一个直接后继;而头元素没有直接前驱,尾元素没有直
接后续
常见的线性结构有数组和链表结构


Java 集合

Java 集合类存放于java.util 包中,是一个用于存放对象的容器
- 集合中只能存放对象,如果存入一个简单类型,实际上进行了自动转换【装箱】
- 集合中存放的是多个对象的引用,对象本身还是存放在堆内存
- 集合中可以存放不同类型、不限数量的数据