二.基本概念和术语
------------------------------2022/12/3-------------------------------
1.逻辑结构
(1)定义:数据的逻辑结构是从逻辑关系上描述数据,它与数据的存储无关,是独立于计算机的.因此数据的逻辑结构可以看作是从具体问题抽象出来的数学模型。
集合结构 < 线性结构 < 树结构 < 图结构或其他网状结构
(2)逻辑结构大纲
2.存储结构
(1)定义:数据对象在计算机中的存储表示称为数据的存储结构,也称为物理结构 ,逻辑结构分为顺序存储结构和链式存储结构
(2)顺序存储结构:顺序存储结构是借助元素在存储器中相对位置来表示数据元素之间的逻辑关系,通常借助程序设计语言的数组类型来描述。
(3)链式存储结构:顺序存储结构要求所有的元素以依次存放在一片连续的存储空间,而链式存储结构,无需占用一整块的存储空间,但为了表示节点之间的关系,需要给每个节点附加指针字段,用于存放后继元素的地址。所以链式存储结构通常借助于程序设计语言的指针类型来描述。
3.数据类型和抽象数据类型
(1)数据类型:数据类型是一个值的集合和定义在这个值集上的一组操作的总称。
(2)抽象数据类型:抽象数据类型 ADT一般指由用户定义的/表示应用问题的数学模型以及定义在这个模型上的一组操作的总成,具体包括三部分:数据对象、数据对象上关系的集合以及数据对象的基本操作的集合。
抽象数据类型定义格式:
ADT 抽象数据类型名{
数据对象:<数据对象的定义>
数据关系:<数据关系的定义>
基本操作:<基本操作的定义>
}
其中,数据对象和数据关系的定义采用数学符号和自然语言描述,基本操作的定义格式为:
基本操作名<参数表>
初始条件:<初始条件描述>
操作结果:<操作结果描述>
- 基本操作有两种参数:
- 赋值参数只为操作提供输入值;
- 引用参数以
&
打头,除可以提供输入值外,还讲返回操作结果。
- 初始条件描述了操作执行之前的数据结构和参数应满足的条件,若初始条件为空,则省略。
- 操作结果说明了操作正常完成之后,数据结构的变化情况和应返回的结果。
以后的《数据结构》笔记采用类C语言描述,该语言精选了C语言的核心自己,同时做了若干扩充修改,增强了语言的描述功能,以下对其作简要说明
(1)预定义常量及类型:
// 函数结果状态代码
#define OK 1
#define ERROR 0
#define OVERFLW -2
// Status是函数的返回值类型,其值是函数结果状态代码。
typedef int Status;
(2)数据结构的表示(存储结构)用类型定义(typedef
)描述;数据元素类型约定为ElemType
,有用户在使用该数据类型时自行定义。
// 根据需要自己定义即可
typedef int ElemType
(3)基本操作的算法都用如下格式的函数来描述:
函数类型 函数名(函数参数表){
// 算法说明
语句序列
}// 函数名
当函数返回值为函数结果状态代码时,函数定义为Status
类型。为了便于描述算法,除了值调用方式外,增加了C++中的引用调用的参数传递方式。在形参表中,以&
打头的参数即为引用参数。传递引用给函数与传递指针的效果是一样的,形参变化实参也发生变化,但引用使用起来比指针更加方便、高效。
(4)内存的动态分配与释放。
使用new
和delete
动态分配和释放内存空间。
分配空间: 指针变量=new 数据类型
释放空间 delete 指针变量
(5)赋值语句:
简单赋值: 变量名 = 表达式
串联赋值: 变量名1 = 变量名2 = ... = 变量名n = 表达式
成组赋值: (变量名1, ... , 变量名n) = (表达式1, ... , 表达式n)
结构赋值:
结构名1 = 结构名2;
结构名 = (值1, 值2, ... , 值n);
条件赋值: 变量名 = 条件表达式?表达式T : 表达式F;
交换赋值: 变量名1 <-->变量名2
(6)选择语句
条件语句 1: if (表达式) 语句;
条件语句 2:
if (表达式) 语句;
else 语句;
开关语句
switch (表达式