一、数据结构基本概念和术语
-
数据(Data)
数据是信息的载体,是所有能够被计算机识别、存储和加工处理的符号的总称。它可以是数值数据,也可以是非数值数据。数值数据是一些整数、实数和复数;非数值数据包括字符、文字、图形、影像、语音等。 -
数据项(Data Item)
数据项是具有独立含义的标识单位,是数据不可分割的最小单位,如学生成绩表中的“学号”、“姓名”等。数据项有名和值之分,数据项名是一个数据项的标识,用变量定义,而数据项值是它的一个可能取值。数据项具有一定的类型,依数据项的取值类型而定。 -
数据元素(Data Element)
数据元素是数据的基本单位。在不同的条件下,数据元素又可称为元素、结点、顶点、记录等。例如学生成绩表中的一个记录就可以被称为一个数据元素。
一般情况下,一个数据元素可由若干数据项组成。通俗地讲,一个表中的一条记录,就是一个数据元素。 -
数据对象(Data Object)
数据对象或数据元素类(Data Element Class)是具有相同性质的数据元素的集合。 -
数据结构(Data Structure)
数据结构是指互相之间存在着一种或多种关系的数据元素的集合。数据结构涉及数据元素之间的逻辑关系,数据在计算机中的存储方式和这些数据上定义的一组运算,一般撑着三个方面为数据的逻辑结构、数据的存储结构和数据的运算。
(1) 逻辑结构- 集合:在集合中,数据元素间的关系是“属于同一个集合”。集合是元素关系极为松散的一种结构。
- 线性结构:该结构的数据元素之间存在着一对一的关系。
- 树结构:该结构的数据元素之间存在着一对多的关系。
- 图结构:该结构的数据元素之间存在着多对多的关系,图结构也称作网状结构。
(2) 存储结构
数据的存储结构最常用的是顺序存储和链式存储的方法。- 顺序存储方法:是把逻辑上相邻的元素存储在物理位置相邻的存储单元中,结点间的逻辑关系由存储单元的邻接关系来体现,由此得到的存储表示成为顺序存储结构。顺序存储结构是一种最基本的存储表示方法,通常借助于程序设计语言中的数组来实现。
- 链式存储方法:对逻辑上相邻的元素不要求其物理位置相邻,元素间的逻辑关系通过相关联的指示来表示,由此得到的存储表示称为链式存储结构,链式存储结构通常借助于程序设计语言中的指针类型或引用类型来实现。
有时为了查找的方便还采用索引存储方法和散列存储方法。 - 索引存储方法:是在存储结点信息的同时,还建立附加的索引表。索引表中的每一项包含关键字和地址,关键字是能够唯一标识一个数据元素的数据项,地址指示出数据元素所在的存储位置。索引存储主要是针对数据内容的存储,而不强调关系的存储,索引存储方法主要面向查找操作。
- 散列存储方法:是以数据元素的关键字的值为自变量,通过某个函数(散列函数)计算出该元素的存储位置。索引存储也是针对数据内容的存储方式。
(3) 数据的运算
- 引用型运算:这类运算不改变数据结构中原有的数据元素的状态,只根据需要读取某些信息。
- 加工型运算:这类运算的结果或改变数据结构中原有数据的状态,如数据元素的内容、个数等。
二、算法的基本概念
- 算法:
是对特定问题求解步骤的一种描述,是指令的有限序列。算法具有有穷性、确定性、可行性、输入和输出的特性。 - 算法的设计要求:
正确性、可读性、健壮性、高效性。 - 算法的复杂度:
(1) 时间复杂度:
是指算法执行所耗费的时间,通常表示为问题规模n的函数T(n),并用大O记法表示算法的渐进书剑复杂度。
(2) 空间复杂度:
是指程序运行时,从开始到结束所需的存储量,包含固定部分和可变部分,通常表示未问题规模n的函数S(n),也可用大O记法表示算法的渐进空间复杂度。