说明:以下内容中的书是指《数据结构与算法(JAVA语言版)》周鹏版,部分内容已经按照搜索引擎的内容修改过。
在数据结构的实现中我们可以很好的将数据结构中的一些基本概念和 Java 语言中的一些概念对应起来。
数据元素可以对应到类,其数据项就是类的成员变量,某个具体的数据元素就是某个类的一个实例;数据的顺序存储结构与链式存储结构可以通过一维数组以及对象的引用来实现;抽象数据类型也可以对应到类,抽象数据类型的数据对象与数据之间的关系可以通过类的成员变量来存储和表示,抽象数据类型的操作则使用类的方法来实现。
数据结构分为:逻辑结构、存储结构。
逻辑结构分为:集合、线性结构、树形结构、图形结构。
--线性表、栈、队列、树、图等逻辑结构。
--其中线性表、栈、队列为线性结构,树和图都是非线性结构。
逻辑结构可以采用两种方法来描述:二元组、图形。
--二元组表示形式: DS = ( D, S ) 【Data Structure】
--其中 D 是数据元素的集合; S 是 D 中数据元素之间的关系集合,并且数据元素之间的关系是使用序偶来表示的。序偶是由两个元素 x 和 y 按一定顺序排列而成的二元组,记作<x , y>, x 是它的第一元素, y 是它的第二元素。
--当使用图形来表示数据结构时,是用图形中的点来表示数据元素,用图形中的弧来表示数据元素之间的关系。如果数据元素 x 与 y 之间有关系<x , y>,则在图形中有从表示 x 的点出发到达表示 y 的点的一条弧。
现在,另数据结构的二元组形式为:DS = (D, S),则:
- 如果 D != null,而S == null,则该数据结构为集合结构。
- 如果 D = {01, 02, 03, 04, 05},S = {<02,04>, <03,05>, <05,02>, <01,03>},则该数据结构是线性结构。
在这些数据元素中有一个可以被称为“第一个”的数据元素;还有一个可以被称为“最后一个”的数据元素;除第一个元素以外每个数据元素有且仅有一个直接前驱元素,除最后一个元素以外每个数据元素有且仅有一个直接后续元素。这种数据结构的特点是数据元素之间是 1对 1 的联系,即线性关系。 - D = {01, 02, 03, 04, 05, 06}
S = {<01,02>, <01,03>, <02,04>, <02,05>, <03,06>}
除了一个数据元素(元素 01)以外每个数据元素有且仅有一个直接前驱元素,但是可以有多个直接后续元素。这种数据结构的特点是数据元素之间是 1 对 N 的联系,即树结构。 - D = {01, 02, 03, 04, 05}
S = {<01,02>, <01,05>, <02,01>, <02,03>, <02,04>, <03,02>,<04,02>, <04,05>, <05,01>, <05,04>}:
每个数据元素可以有多个直接前驱元素,也可以有多个直接后续元素。这种数据结构的特点是数据元素之间是 M 对 N 的联系,即图结构。
存储结构分为:顺序存储结构、链式存储结构。
算法( algorithm) 是指令的集合,是为解决特定问题而规定的一系列操作。
在计算机资源中,最重要的就是时间与空间。评价一个算法性能的好坏,实际上就是评价算法的资源占用问题。
算法运行时间的确定问题,这个问题被称之为算法的时间复杂性;算法的空间复杂性是由算法运行时使用的空间来评价的。但算法的空间复杂性是以时间复杂性为上界的!
一般来说,不存在固定的方法,使用它就可以得到一个算法的时间复杂度。但是在分析算法的时间复杂度时有一些常用技术是可以使用的。
计算循环次数、分析最高频度的基本操作、最佳最坏及平均情况分析、均摊分析。