何为数据?
数据是信息的载体,在计算机科学中指的是所有能够输入到计算机中并能够被计算机程序识别和处理的符号集合。
可分为两类:一类是整数、实数等数值数据;另一类是文字、图像、声音等非数值数据。
何为数据结构?
数据结构(data structure)是指相互之间存在一定关系的数据元素的集合。
数据元素:是数据的基本单位,也是在讨论数据结构时候涉及的最小数据单位。由数据项构成,数据项是不可分割的最小单位。
也就是,数据结构是由数据元素和数据元素之间的关系构成的一个集合。
按逻辑结构如何分类?
逻辑结构:数据元素之间的逻辑关系,是抽象出来的数据模型。
按照数据元素之间的逻辑关系,分为一下四类:
- 集合:属于同一个集合,彼此之间无关系。
- 线性结构:一对一的线性关系。
- 树结构:一对多的层次关系。
- 图结构:多对多的任意关系。
按存储结构如何分类?
存储结构:即物理结构,是数据的逻辑结构在计算机内存中的映象(即表示)。即存储两个部分:数据元素,以及数据元素之间的逻辑关系。
通常有两种存储结构:
- 顺序存储结构,采用连续的存储单元依次存放数据。数据元素之间的逻辑关系由元素的存储位置来表示。最常见的如:数组。
- 链式存储结构,用任意一组存储单元存储数据元素,数据元素之间的逻辑关系用指针来表示。最常见的如:链表。
抽象数据类型
- 抽象:抽出问题的本质特征,忽视非本质的细节。如:地图
- 数据类型:一组值的集合以及定义在这个集合上的一组操作的总称。即:数据+该数据的操作。如C语言中的int,规定了值的取值范围,允许操作有算术运算、关系运算、逻辑运算等。
- 抽象数据类型(Abstract Data Type,ADT):是一个数据结构,以及定义在该结构上的一组操作的总称。可以理解为事数据类型的进一步抽象。
不妨看看线性表的抽象数据类型的定义:ADT List
Data
线性表中的数据元素具有相同的类型,相邻元素具有前驱和后继关系
Operation
InitList前置条件:线性表不存在 输入:无 功能:线性表的初始化 输出:无 后置条件:一个空的线性表
Create
前置条件:线性表不存在 输入:n个数据元素 功能:建立一个具有n个元素的线性表 输出:无 后置条件:一个具有n个元素的线性表
Length
前置条件:线性表存在 输入:无 功能:求线性表的长度 输出:线性表中数据元素的个数 后置条件:线性表不变
Get
前置条件:线性表存在 输入:元素的序号 功能:按位查找,在线性表中查找序号为i的数据元素 输出:如果需要合法,返回序号为i的元素值,否则抛出异常 后置条件:线性表不变
Locate
前置条件:线性表存在 输入:数据元素 功能:按值查找,在线性表中查找值等于x的元素 输出:如果查找成功,返回元素x在表中的序号,否则返回0 后置条件:线性表不变
Insert
前置条件:线性表存在 输入:插入位置;待插入元素 功能:插入操作,在线性表的第i个位置处插入一个新的元素x 输出:若插入不成功,抛出异常 后置条件:若插入成功,表中增加了一个新元素
Delete
前置条件:线性表存在 输入:删除位置i 功能:删除第i个位置的元素 输出:若删除成功,返回被删除元素,否则抛出异常 后置条件:若删除成功,表中减少一个元素
Empty
前置条件:线性表存在 输入:无 功能:判空操作,判断线性表是否为空表 输出:若是空表,返回1,否则返回0 后置条件:线性表不变
PrintList
前置条件:线性表存在 输入:无 功能:遍历操作,按序号一次输出线性表中的元素 输出:线性表的各个数据元素 后置条件:线性表不变
endADT
然后,根据ADT,我们可以采用顺序表实现,也可以采用链表实现上述操作。