Java数据结构——基础篇
一、基本概念
数据与数据结构
- 数据
能够被计算机程序识别、存储、加工和处理的描述客观事物的数字等符号集合的总称。如“书籍信息表”中的所有信息均为数据。- 数据项
具有独立含义的、数据不可分割的最小标识单位,是数据元素的组成部分,也称字段和域。(分为简单数据项和组合数据项)- 数据元素
数据的基本单位,又称为元素、节点、定点和记录,是一个数据整体中可以标识和访问的数据单元- 数据对象
性质相同的数据元素的集合,也叫数据元素类,是数据的一个子集,数据元素是数据对象的一个实例。![]()
- 数据结构
相互之间存在着一种或多种关系的数据元素的集合。
5.1 逻辑结构
数据元素之间存在的逻辑关系,于数据的存储无关,独立于计算机存在,是从具体问题中抽象出来的数学模型。主要由数据元素的集合和关系的集合构成。
(1)集合结构
(2)线性结构
元素存在“一对一”的对应关系,除开始和结束结点外,每一个元素有唯一的前驱结点和后继结点。
(3)树形结构——非线性结构
元素存在“一对多”的对应关系,除开始和结束结点外,每一个元素有唯一的前驱结点和多个后继结点。
(4)图形结构——非线性结构
元素存在“多对多”的对应关系,所有节点都有多个前驱结点和多个后继结点。
5.2 存储结构
逻辑结构在计算机中的存储或实现,依赖于计算机。
(1)散列存储结构
(2)顺序存储结构
(3)链式存储结构
(4)索引存储结构
数据类型
二、算法
算法概念
算法是又穷规则的集合,其规则确定一个解决特定问题的指令序列。
- 特性
(1)有限性——算法必须在又穷步骤后结束
(2)确定性——每一个算法都有确定的返回结果
(3)可行性——算法可运行
(4)有输入——有多个或零个输入
(5)有输出——有一个或多个输出- 目标
(1)正确性
(2)健壮性
(3)高效性
(4)可读性算法描述
- 自然语言
- 程序设计语言
- 伪代码
算法分析
通过某种方法讨论算法的复杂度,评论算法的效率。
- 时间复杂度——算法执行时间的长短,只考虑算法执行时间和问题规模之间的关系
当问题的规模为n,T(n)表示此时算法的执行时间,即为算法时间复杂度,当n增加,T(n)也随之增加。可以理解为一个算法中的语句的执行次数,称为语句频度或时间频度。
算法是时间复杂度通常采用算法渐进分析中的大O表示法作为其渐进度量值,成为算法的渐进时间复杂度
大O表示法:当前仅当存在正整数c和n0,使0<=T(n)<=cf(n)对所有的n>=no都成立,算法的时间增长率与f(n)相同,记为T(n) = O(f(n))。
通常f(n)为n的高阶多项式,在考虑其时间复杂度是可以只考虑最高次幂项并且可以忽略其系数的影响。
时间复杂度分为常数级、对数级、线性级、平方级、立方级、指数级,大小关系如下:
O(1)<O(log2n)<O(n)<O(nlog2n)<O(n2)<O(n3)<O(2n)- 空间复杂度——算法执行时所占用的额外存储空间量。
当问题的规模为n,S(n)表示此时算法的占用空间量,即为算法空间复杂度,当n增加,S(n)也随之增加。
分析方法和时间复杂度一样,采用大O表示法。