本篇目录结构
第一章 绪论
1.1 数据结构的研究内容
这个自己看(略)
1.2 基本概念和术语
1.2.1 几个名词解释
1.数据
- 信息的载体。
- 对客观事物的符号表示。
- 能够被计算机识别、存储和加工。
包括:
- 数值型的数据:整数、实数等。
- 非数值型的数据:文字、图像、图形、声音等。
2.数据元素
- 是组成数据的基本单位,在计算机中通常作为一个整体进行考虑和处理。
- 也可以简称元素、记录、结点或顶点。
就好比Java中的类,用于完整地描述一个对象。(例如Student)
3.数据项
- 组成数据元素的、有独立含义的、不可分割的最小单位。
可以参考Java类的成员变量。(例如Student的age属性)
4.数据对象
- 是性质相同的数据元素的集合,是数据的一个子集。
数据元素和数据对象的区别 | ||
---|---|---|
1、数据元素是组成数据的基本单位,是集合的个体。 | ||
2、数据对象是性质相同的数据元素的集合,是集合的子集。 |
1.2.2 数据结构
数据结构是相互之间存在一种或多种特定关系的数据元素的集合。
理解:数据元素之间不是孤立存在的,彼此存在某种关系,这种关系就成为结构;
那么上面定义,就理解成:数据结构是带“结构”的数据元素的集合。
三个方面
数据结构包含三个方面(小重点):
1、数据元素之间的逻辑关系,也成为逻辑结构。
2、数据元素及其关系在计算机内存中的表示(也成为映像),称为数据的物理结构或数据的存储结构。
3、数据的运算和实现,即对数据元素可以施加的操作以及这些操作在相应的存储结构上的实现。
两个层次
1、逻辑结构
- 描述数据元素之间的逻辑关系。
- 与数据的存储无关,独立于计算机。
- 是从具体问题抽象出来的数据模型。
逻辑结构的两大要素:数据元素+关系,数据结构已经介绍的差不多了,下面对“关系”的两种划分方式进行展开。
线性划分
(1)线性结构
有且仅有一个开始和一个终端结点,并且所有结点都最多只有一个直接前趋和一个后继。
例如:线性表、栈、队列、串等。
(2)非线性结构
一个结点可能有多个直接前趋和直接后继。
例如:树、图等。
长相划分
下面图中描述的是“数据元素”。
2、物理(存储)结构
- 是数据元素及其关系在计算机存储器(内存)中的存储方式(结构)。
- 是数据结构在计算机中的表示。
这么理解上面的两句话呢?
我们要把数据对象存储到计算机中,既要存储数据元素的数据,又要存储数据元素之间的逻辑关系。就比如数据元
素在计算机内是用一个结点表示,那么使用什么样的方式去链接这些结点?就是物理结构。
顺序存储结构
- 用一组连续的存储单元依次存储数据元素,数据元素之间的逻辑关系由元素的存储位置来表示。
- C语言中用数据来实现顺序存储结构。
链式存储结构
- 用一组任意的存储单元存储数据元素,数据元素之间的逻辑关系用指针来表示。
- C语言中用指针来实现链式存储结构。
3、两者之间的关系
- 存储结构是逻辑关系的映象与元素本身的映象。
- 逻辑结构是数据结构的抽象,存储结构是数据结构的实现。
- 两者综合起来建立了数据元素之间的结构关系。
4、【扩展】
除了上面的两种存储结构,再补充一些进行了解。
索引存储结构
- 在存储结点信息的同时,还建立附加的索引表。
这个在操作系统中也会介绍,可以参考手机通讯录去思考,把为一大堆手机联系人的信息建立一个索引表(通讯录)。
散列存储结构
- 根据结点的关键字直接计算出改结点的存储地址。
这部分知识会在查找那里详细介绍,这里先有个印象即可。
1.2.3 数据类型和抽象数据类型
1、数据类型
在写代码的时候,必须对程序中出现的每个变量、常量或表达式,明确说明它们所属的数据类型。
例如:
- int、char、float、double等基本数据类型。
- 数据、结构、枚举等构造数据类型。
- 还有指针、空类型。
- 最后还有用户自定义的数据类型。
数据类型明显或隐含地规定了数据的取值范围、存储方式以及允许进行的运算。
数据类型的作用
- 约束变量或者常量的取值范围。
- 约束变量或常量的操作。
数据类型的定义
数据类型是一组性质相同的值的集合以及定义于这个值集合上的一组操作的总称。
数据类型=值(集合)+值的操作(集合)。
2、抽象数据类型
一些基本数据结构可以用数据类型来实现,例如数组、字符串等。
但是栈、队列、树、图等数据结构,是无法用数据类型来表示,这就需要抽象数据类型了。
抽象数据类型一般是由用户定义的、表示应用问题的数学模型,以及定义在这个模型上的一组操作的总称,具体包含三
个部分:数据对象、数据对象上关系的集合以及对数据对象的基本操作的集合。
抽象数据类型的形式定义,抽象数据类型可用(D,S,P)三元组表示:
- D是数据对象。
- S是D上的关系集。
- P是对D的基本操作集。