1.1 基本概念
在计算机中, 数据结构就是指计算机存储, 组织数据方式
的描述, 主要描述数据元素之间的逻辑关系以及在计算机
中存储形式, 也要相互之间存在一种或者多种特定关系
的数据的集合
数据结构的选择决定了程序执行的时间效率
和存储效率的高低
计算机程序 = 数据结构 + 算法
1.2 数据结构的3个层次
(1) 逻辑结构
- 主要是描述数据元素之间的逻辑关系
(2) 物理结构
- 主要描述数据结构元素之间的位置关系, 也就是数据元素在
计算机中的存储形式
(3) 运算结构
- 主要描述数据结构如何实现以及常见的基本操作
1.3 逻辑结构的分类
(1) 集合结构
- 主要描述所有数据结构元素属于一个集合,
不强调数据元素之间的关系
如:
统称为一个班级
2 3 5 7 11 13 17 ... 都属于素数 / 质数
(2) 线性结构
- 主要描述所有数据元素之间存在一对一的前后关系
该结构中必须存在唯一的首元素
该结构中必须存在唯一的尾元素
除了首元素之外, 每个元素有且只有一个前趋元素
除了尾元素之外, 每个元素有且只有一个后继元素
如:
等公交时排的队伍
手链
(3) 树形结构
- 主要描述数据元素之间存在一对多的父子关系
整个树形结构有且只有一个其实元素, 叫根元素
整个树形结构中顶端的元素叫做叶元素
除了根元素之外, 所有的元素有且只有一个前趋元素
除了叶元素之外, 所有的元素可以有多个后继元素
如:
树
家谱
(4) 网状结构(图形结构)
- 主要描述数据元素之间存在多对多的交叉映射结构
该结构中的元素可以有多个前趋和多个后继元素
如:
蜘蛛网
球拍
1.4 物理结构的分类
(1) 顺序存储结构
- 采用一组连续的存储单元依次存放逻辑上相邻的各个元素
如果表中的各个元素都有相同的属性,
那么每个元素所占的存储单元相同
采用C语言中的数组类型加以描述
思考:
顺序存储结构有什么优点以及有什么缺点
优点:
a. 只需要申请存放数据元素本身的存储空间即可
不需要额外的存储空间来表达数据元素之间的关系
因此比较节省内存空间
b. 支持下标访问, 可以实现随机访问
缺点:
a. 申请存储空间是需要预先指定数据元素的个数来确定
存储空间的大小, 如果存储空间过小则不够用, 如果
空间过大则造成浪费
b. 申请连续的存储空间导致内存空间的利用率比较低
因为小块的内存空间可能使用不了
c. 插入/删除元素是, 可能需要移动大量的元素
(2) 链式存储结构
- 采用一组不连续的存储单元来存储所有的元素, 不要求
逻辑相邻的元素在物理位置上也相邻, 而是为每一个元素
构造一个独立的存储单元, 该存储单元叫做节点
每个节点由两部分组成, 分别存放数据元素本身 和
记录下一个节点的首地址
在C语言中并没有提供具体的数据类型来描述链式存储结构
需要我们程序员手动编码实现
优点:
a. 申请存储空间时不需要预先制定数据元素的个数来确定存储空间的大小
b. 不需要申请连续的存储空间因此存储空间的利用率比较高可以使用零散的小块内存
c. 插入/删除元素比较方便,不需要移动大量的元素
缺点:
a. 申请内存空间时, 除了申请存放数据元素本身的存储空间之外,
还需要额外的存储空间来表达数据
元素之间的关系,因此想对来说内存空间的消耗比较大
b. 不支持下标访问, 也不方便实现随机访问
1.5 逻辑结构和物理结构的关系
一般来说, 逻辑结构采用何种物理结构进行实现
并没有明确的规定, 通常根据实现的难易程度,
以及在时间复杂度和空间复杂度方面的考虑,
来选择合适的物理结构, 也不排除一种逻辑结构
采用多种物理结构来实现的情况
1.6 运算结构
(1) 创建和销毁
申请存储空间 => 建立数据结构 => 释放存储空间 => 销毁数据结构
(2) 插入/删除
插入 - 增加元素
删除 - 减少元素
(3) 修改和查找
遍历数据结构中所有的元素
修改指定的元素值
(4) 排序
采用一些常见的排序算法和查找算法