在计算机中主要用于非数值计算和处理一些具有一定结构的数据,这些数据内容中存在着某种联系,只有分清楚数据的内在联系,合理的处理数据,才能对他们进行有效地处理,设计出高效的算法。如何合理的组织数据,高效的处理数据,这便是数据结构主要研究的问题。
提示:以下是本篇文章正文内容.
数据(Data):是客观事物的符号表示,是所有能输人到计算机中并被计算机程序处理的符号的总称。如数学计算中用到的整数和实数,文本编辑中用到的字符串,多媒体程序处理的图形、图像、声音及动画等通过特殊编码定义后的数据。
数据元素( Data Element ):是数据的基本单位,在计算机中通常作为一个整体进行考 虑和处理。在有些情况下,数据元素也称为元素、记录等。数据元素用于完整地描述一个对象, 如前一节示例中的一名学生记录,树中棋盘的一个格局(状态),以及图中的一个顶点等。
数据项(Data Item):是组成数据元素的、有独立含义的、不可分割的最小单位。例如,学生基本信息表中的学号、姓名、性别等都是数据项。
数据对象( Data Object ):g是性质相同的数据元素的集合,是数据的一一个子集。例如:整数数据对象是集合N= {0, +1, +2, …},字母字符数据对象是集合C= {‘A’, ‘B’,.,“Z’,‘a’,‘b’,-,‘z},学生基本信息表也可以是一个 数据对象。由此可以看出,不论数据元素集合是无限集(如整数集),或是有限集(如字母字符集),还是由多个数据项组成的复合数据元素(如学生表)的集合,只要集合内元素的性质均相同,都可称之为一一个数据对象。
数据结构:是相互之间存在种或多种特定 关系的数据元素的集合。换句话说,数据结构是带“结构”的数据元素的集合,“结构”就是指数据元素之间存在的关系。数据结构包括逻辑结构和存储结构两个层次。
逻辑结构:数据的逻辑结构是从逻辑关系上描述数据,它与数据的存储无关,是独立于计算机的。因此,数据的逻辑结构可以看作是从具体问题抽象出来的数学模型。
数据的逻辑结构有两个要素: 一是数据元素;二是关系。数据元素的含义如前所述,关系是指数据元素间的逻辑关系。根据数据元素之间关系的不同特性,通常有四类基本结构,如图1.3所示。它们的复杂程度依次递进。
集合结构:数据元素之间除了“属于同一集合”的关系外,别无其他关系。
线性结构:数据元素之间存在一-对一 的关系
树结构:数据元素之间存在一-对多的关系。
图结构或网状结构:数据元素之间存在多对多的关系。
数据对象在计算机中的存储表示称为数据的存储结构,也称为物理结构。把数据对象存储到计算机时,通常要求既要存储各数据元素的数据,又要 存储数据元素之间的逻辑关系,数据元素在计算机内用一个结点来表示。数据元素在计算机中有两种基本的存储结构,分别是顺序存储结构和链式存储结构。
顺序存储结构:是借助元素在存储器中的相对位置来表示数据元素之间的逻辑关系,通常借助程序设计语言的数组类型来描述。
链式存储结构:顺序存储结构要求所有的元素依次存放在一片 连续的存储空间中,而链式存储结构,无需占用一整块存储空间。但为了表示结点之间的关系,需要给每个结点附加指针字段、用于存放后继元素的存储地址。所以链式存储结构通常借助于程序设计语言的指针类型来描述。
在程序设计语言中,每一种数据都属于某种数据类型。类型明显或隐含的规定了数据的取值范围,存储方式以及允许进行的运算,数据类型是一个值的集合和定义在这个值集上的一组操作的总称。
抽象数据类型一般指由用户定义的,表示应用问题的数学类型,以及定义在这个类型上的一组操作的总称,以及定义在这个模型上的一组操作的总称,具体包括三部分:数据对象、数据对象上关系的集合以及对数据对象的基本操作的集合。
抽象数据类型的定义格式如下:
ADT 抽象数据类型名{
数据对象:<数据对象定义>
数据关系:<数据关系的定义>
基本操作:<基本操作的定义>
}ADT 抽象数据类型名
其中,数据对象和数据关系的定义采用数学符号和自然语言描述,基本操作的定义格式:
基本操作名(参数表)
初始条件<初始条件描述>
操作结果<操作结果描述>
基本操作有两种参数:赋值参数只为操作提供输入值;引用参数以“&”打头,除可提供输入值外,还将返回操作结果。“初始条件”描述了操作执行之前数据结构和参数应满足的条件,若初始条件为空,则省略。“操作结果”说明了操作正常完成之后,数据结构的变化状况和应返回的结果。
算法( Algorithm)是为了解决某类问题而规定的一-个有限长的操作序列。
一个算法必须满足以下五个重要特性。
(1)有穷性。- 个算法必须总是在执行有穷步后结束, 且每一步都必须在有穷时间内完成。
(2)确定性。对于每种情况下所应执行的操作,在算法中都有确切的规定,不会产生二义性,使算法的执行者或阅读者都能明确其含义及如何执行。
(3)可行性。算法中的所有操作都可以通过已经实现的基本操作运算执行有限次来实现。
(4)输入。一个算法有零个或多个输人。当用函数描述算法时,输人往往是通过形参表示的,在它们被调用时,从主调函数获得输入值。
(5)输出。-个算法有-个或多个输出,它们是算法进行信息加工后得到的结果,无输出的算法没有任何意义。当用函数描述算法时,输出多用返回值或引用类型的形参表示。
(1》正确性。在合理的数据输人下。重够在有限的运行时间内得到正确的结果。
2)可话性一个好的算法。首先应便于人们理案和相互交流。莫次才是机器可执行性。 可要兰道的算注有助于人们对算法的理解。而难童的算法易于隐麦结误。且难于调注和修改。
(3)建注性。当输人的数据非法时。好的算法能适当地做点正确反应或进行相应处理。面不会产生一些美 名其妙的输土结果。
4)高菱性。高效性包括时间和空间两个方面。时间高效是指算法设计合理、执行效率高、可以月时间复杂度来变量:空间高效是指算法占用存储容量合理,可以用空间复杂度来度量。时间复杂变和空间复杂度是妻量真法的两个主要指标。
与算法的执行频率有关
多项相加保留最高项
多项相乘都保留
O(1) < O(logn) < O(n) < O(nlogn) < O(n2) < O(n3) < O(2n) < O(n!) < O(nn)
复杂程度越低,算法越简便。