1. 概念
数据结构主要学习:数据元素集合的:逻辑结构、物理结构、及对数据元素集合的 运算操作。
1.1. 数据结构三要素
- 物理结构
- 逻辑结构
- 运算操作
1.2. 基本概念
数据:描述客观事物的符号,是计算机中可以操作的对象,是能被计算机识别,并输入给计算机处理的符号集合。
数据对象:是性质相同的数据元素/结点的集合,是数据的子集。
数据元素:数据元素是组成 数据 且有一定意义的基本单位,在计算机中通常作为整体处理。又被称为结点。
结点这个词一定要熟悉,在链表中会大量出现。
数据项:一个数据元素可以由若干个数据项组成。数据项是数据不可分割的最小单位。
【数据】 | |||||
数据对象 | |||||
数据元素/结点 | 数据元素/结点 | 数据元素/结点 | |||
数据项1 | 数据项2 | 数据项1 | 数据项2 | 数据项1 | 数据项2 |
struct student stu_arr_23061[49]; // 数据对象
struct student t1; // 数据元素/结点
t1.weight = 123.6; // 数据项
2. 逻辑结构
逻辑上,数据对象中 数据元素/结点(单个对象) 之间的,相互关系。
逻辑结构通常分为以下几种:
- 集合结构:数据元素/结点 除了同属于一个集合外,他们之间没有其他关系。
- 线性结构:数据元素/结点 是一对一的关系。
- 树形结构:数据元素/结点 之间存在一种一对多的关系。
- 图形结构:数据元素/结点 之间是多对多的关系。
3. 物理结构
数据的 逻辑结构 在计算机 内存中 的 存储形式。
物理结构通常分为以下几种:
- 顺序存储结构
- 链式存储结构
- 索引存储结构(暂不常用)
- 散列存储结构(暂不常用)
3.1. 顺序存储结构
把 数据元素/结点(单个变量) 存放在 地址连续 的存储单元里,逻辑上 相邻的元素在内存上 也相邻。
这样的存储形式,称为顺序存储结构。数组就是这样的顺序存储结构。
顺存储结构就像排队,大家都按照顺序排好,每个人占一小段空间,逻辑上谁也不能插队。
特点:
1. 内存连续。
2. 随机存取(不需要遍历而是直达,因地址已知)。
3. 相对于链式存储结构每个元素占用的空间少(不需要指针域)。
3.2. 链式存储结构
把 数据元素/结点(单个变量) 存放在任意的内存单元里。
数据元素/结点 之间的 逻辑关系 通过 附设的指针域来表示,由此得到的存储表示成为链式存储结构。
特点:
1. 内存不连续(运气好可以连续,只是不关注,默认不连续)
2. 通过指针连接
3.3. 索引存储结构(暂不常用)
在存储数据的同时,建立一个附加的索引表,即索引存储结构 = 数据文件 + 索引表。
特点:(类似字典)
1. 检索速度快。
2. 多了一张索引表,故占用内存多。
3. 删除数据文件时要及时更改索引表。
举例子:
电话号码查询问题:为提高查询速度,在存储用户数据文件的同时建立一张姓氏索引表,如下所示:
查找一个人的电弧就可以先查索引表,再查相应的数据文件,加快了查询速度。
3.4. 散列存储结构(暂不常用)(哈希存储结构)
通过构造相应散列函数,由散列函数的值来确定 数据元素/结点 存放的地址(即关键字和地址存在映射关系)。
特点:(增加映射运算,减小空间)
1. 存的时候按照对应关系存。
2. 取的时候按照对应关系取。
逻辑结构是面向问题的,物理结构是面向计算机的。
其基本目标就是将数据及其逻辑关系存储到计算机的内存中。