- 数据结构,英文是data structure,其实名字已经很清晰了。
这是一门专门处理数据的学科,数据元素相互之间的关联称为结构,描述的是存储和组织数据的方式。
按照书中的说法,数据结构是指相互之间存在一种或多种特定关系的数据元素的集合。
下面我们就继续明确几个概念。 - 数据:对客观事物的符号表示,指所有能输入到计算机中并被计算机程序处理的符号的总称。
上面场景中的注册信息,就是数据。数据库中存储的用户记录,那也是数据没跑了。 - 数据项:数据项是数据的不可分割的最小单位。
这个不用太困惑,如上图所示的用户表中的id,accont,password等每一个字段,都是一个数据项。 - 数据元素:数据的基本单位,在计算机中作为一个整体进行考虑和处理。一个数据元素由多个数据项组成。
那就比较好理解了,用户表中的每一条User记录就是一个数据元素。 - 数据对象:性质相同的数据元素的集合,是数据的一个子集。
这里要记住集合这个概念,所有的用户组合到一起是数据对象,所有的女性用户也是一组数据对象。
二 数据结构和数据类型
通常数据结构有四种结构:
- 集合
- 线性结构
- 树形结构
- 图(网)状结构
上面说都是数据的逻辑关系,数据结构中的物理结构(存储结构)有两种:
- 顺序存储结构
- 链式存储结构
下面再介绍一个概念,数据类型——一个值的集合和定义再这个值集上的一组操作的总称。
注意:这个概念中说的,不只包含值的集合,还包含对值集的操作。
数据类型又分为两类: - 原子类型:值不可再分割。比如Java中的int,char,String等。
- 结构类型:由若干成分按某种结构组成,可以被分解。比如一个整型数组,可以循环分割成多个整型元素。
还有两种不太常见的数据类型 - 抽象数据类型(ADT):指一个数学模型以及定义在该模型上的一组操作,或者我们可以把它理解成我们开发过程中自己定义的数据类型。
笔者认为它与基本数据类型的并没有本质的区别,主要在于抽象数据类型更贴近于实际的使用。 - 多形态数据类型:指其成分不确定的数据类型,笔者认为这个不太重要,了解一下就可以了。
三 算法和算法分析
算法是对特定问题求解步骤的一种描述,说白了就是我们通过解决问题的程序代码,就可以说是算法。
算法具有以下5个特征: - 有穷性:算法必须在执行有限个步骤之后终止。
- 确定性:算法的每一步骤必须有确切的定义,相同的输入只能得出相同的输出。
- 可行性:或者叫有效性,每个计算步都可以在有限时间内完成。
- 输入:一个算法由零个或多个输入。
- 输出:一个算法有一个或多个输出。
好的算法的评判标准:
- 正确性:满足具体问题的需求。
- 可读性:容易被人所理解。
- 健壮性:对输入的非法数据,能偶适当的进行处理。
- 效率与低存储量需求:尽量使算法的执行时间越短,运行时占用的空间更小。
算法效率的度量: - 事后统计的方法:对运行结果进行统计分析,得出执行效率。
- 事前分析估算:估算算法的时间复杂度——算法的时间复杂度是一个函数,它定性描述了该算法的运行时间。这是一个关于代表算法输入值的字符串的长度的函数。
时间复杂度常用大O符号表述,如O(1),O(n),O(n)等,不包括这个函数的低阶项和首项系数。
一般我们最常用的办法是讨论算法在最坏情况下的时间复杂度。