绪论一
1.1 什么是数据结构
1.1.1数据结构的定义
首先,我们了解用计算机解决一个具体问题有哪几个步骤:- 分析问题,解决数据模型
- 设计相应的算法
- 编写程序,运行并调试程序,直至得到正确的结果
寻求数据模型的实质是分析问题,从中提取操作的对象,并找出这些操作对象之间的关系,然后用数字语言加以描述。
- 数据:描述客观事物的符号,是计算机中可以操作的对象
可以输入到计算机、能够被计算机程序处理
数据不仅包括整形、实型等数值类型,还包括字符及声音、图像、视频、等非数值类型 - 数据元素:组成数据的基本单位,是数据结构的聚焦点
- 数据项:数据不可分割的最小单位,一个数据元素可以由多个数据项组成
- 数据对象:性质相同的数据元素的集合,是数据的子集
- 数据结构:相互之间存在一种或多种特定关系的数据元素的集合
- 数据的逻辑结构:由数据元素之间的逻辑构成
- 数据的存储结构(物理结构):数据元素及其关系在计算机存储器中的存储表示,也称为数据的物理结构
- 数据的运算:施加在该数据上的操作
1.1.2数据的逻辑结构
1.逻辑结构的表示
- 图标表示:采用表格或图形之间描述数据的逻辑关系
- 二元数组表示:一种通用的数据逻辑结构表示方式
2.逻辑结构的类型
- 集合
元素之间的关系:无
特点:数据元素之间除了属于“同一个集合”的关系外,别无其他逻辑关系。
- 线性结构
元素之间的关系:一对一
特点:开始元素和终端元素都是唯一的,除此之外,其余元素都有且仅有一个前趋元素和一个后继元素
- 树形结构
元素之间的关系:一对多
特点:开始元素唯一,终端元素不唯一
- 图形结构
元素之间的关系:多对多
特点:所有元素都有可能有多个前趋元素和多个后继元素
1.1.3数据的存储结构
- 顺序存储结构
采用一组连续的存储单元存放所有的数据元素,将数据的逻辑结构之间映射到存储结构。
优点:存储效率高;元素之间的逻辑关系没有占用额外空间
缺点:不便于数据修改;对元素的插入或删除操作可能需要移动一系列的元素
- 链式存储结构
每个逻辑元素用一个内存结点存储,每个节点是单独分配的,所有的结点不一定是连续的,所以无须占用一整块存储空间
优点:便于数据修改;对元素进行插入或删除操作时仅需要修改相应结点针域,不必移动结点
缺点:存储空间利用率较低;因为分配给元素的存储单元有一部分用来存储结点之间的逻辑关系
- 索引存储结构
存储数据元素信息的同时还建立附加的索引表。存储所有数据元素信息的表称为主数据表,其中每个数据元素有关键字和对应发存储地址。
优点:查找效率高;
缺点:需要建立索引表,增加空间开销;
- 哈希存储结构
根据数据元素的关键字通过哈希(散列)函数直接计算出一个值,并将这个值作为该元素的存储地址
优点:查找效率快;只要给出待查元素的关键字就可以立即计算出该元素的存储地址
缺点:哈希存储结构只存元素的数据,不存元素之间的逻辑关系;哈希存储结构一般只适合要求对数据能够进行快速查找和插入的场合
1.1.4数据运算
对数据实施的操作
每种数据结构都有一组相应的运算,常用的运算有:检索、插入、删除、更新和排序等
数据运算最终都需要在对应的存储结构上用算法实现,所以数据运算分为:运算定义和运算实现两个层面
1.1.5数据类型和抽象数据类型
数据类型
对每个变量、常量或表达式明确地说明他们所属的数据类型
不同数据类型的变量,取值范围和所能进行的运算可能不同。
抽象数据类型
用户进行软件系统设计时从问题的数学模型中抽象出来的逻辑数据结构和逻辑数据结构上的运算,而不考虑计算机的具体存储结构和运算的具体实现算法。一个抽象数据类型可用(D、S、P)三元组表示:
- D:数据对象表示数据对象
- S:数据对象(D)上的关系表示数据关系
- P:数据对象(D)中数据运算的基本运算集表示数据基本运算
ADT 抽象数据类型名
{
数据对象:数据对象的声明
数据关系:数据关系的声明
基本运算:基本运算的声明
}
其中基本运算的声明格式为:
基本运算名(参数表):运算功能描述
基本运算一两中参数,其中值参数只为运算提供输入值,引用参数以&打头,除了可提供输入值以外,还将返回运算结果。