数据结构与算法(JAVA)
一、概述
1、数据结构概述
数据结构是指相互之间存在着一种或多种关系的数据元素的集合和该集合中数据元素之间的关系组成
-
数据的存储结构
-
顺序存储结构:
该结构是把逻辑上相邻的结点存储在物理位置上相邻的存储单元中,结点之间的逻辑关系由存储单元的邻接关系来体现;
-
链式存储结构
又叫链接存储结构,在计算机中用一组任意的存储单元存储线性表的数据元素(这组存储单元可以是连续的,也可以是不连续的);
-
两种存储的区别
1、顺序结构需要开辟一个定长的空间,读写速度快,缺点是不可扩充容量(如果要扩充需要开辟一个新的足够大的空间把原来的数据重写进去);
2、链式结构无需担心容量问题,读写速度相对慢些,由于要存储下一个数据的地址所以需要的存储空间比顺序结构要大;
-
-
数据的逻辑结构
-
集合结构
数据元素同属于一个集合,他们之间是并列的关系,除此之外没有其他关系
-
线性结构
有序数据元素的集合
-
树形结构
一层次的嵌套结构,一个树形结构的外层和内层有相似的结构,所以这种结构多可以递归表示
-
图形结构
图形结构是一种比树形结构更复杂的非线性结构。在树形结构中,结点间具有分支层次关系,每一层上的结点只能和上一层中的至多一个结点相关,但可能和下一层的多个结点相关。而在图形结构中,任意两个结点之间都可能相关,即结点之间的邻接关系可以是任意的。
-
2、算法概述
-
算法的定义
是指解题方案的准确而完整的描述,是一系列解决问题的清晰指令,算法代表着用系统的方法描述解决问题的策略机制。
-
算法的特性
-
输入
算法有0~正无穷的输入
-
输出
至少有一个输出
-
有穷性
在有限的步骤能够得出结果
-
确定性
一个输入对应一个输出,结果是确定的
-
可行性
算法要解决实际问题
-
-
算法的基本要求
-
正确性
算法要正确地解决问题
-
可读性
算法可供人们阅读的容易程度
-
健壮性
个好的算法还应该能对输入数据不合法的情况做合适的处理。比如输入的时间或者距离不应该是负数等。当实际输入数据不合法时,算法也能做出相关处理,而不是产生异常或莫名其妙的结果。
-
时间复杂度
算法运行所需要的计算工作量(时间)
-
公式:T(n) = O(f(n)) 表示代码执行的时间;n表示数据规模的大小;f(n)表示每行代码执行的次数总和。因为这是一个公式,所以用f(n)来表示。公式中的O,表示代码的执行时间T(n)与f(n)表达式成正比。
-
时间复杂度的运算规则
-
通常会忽略掉公式里面的常量和低阶和系数
(我们在分析一个算法、一段代码的时间复杂度的时候,也只关注循环执行次数最多的那一段代码就可以了。这段核心代码执行次数的n的量级,就是整段要分析代码的时间复杂度。)
-
总复杂度等于量级最大的那段代码的复杂度
-
嵌套代码的复杂度等于嵌套内外代码复杂度的乘积
-
-
常见的时间复杂度
-
-
空间复杂度
算法运行所需要的内存空间
-