学习数据结构 是为了 如何让写的程序更加高效,数据结构是数据组成元素关系的学科
数据
是能够被计算机识别,存储和处理的符号总称
数据结构是指内存中的数据
磁盘中的数据属于文件结构
数据元素
是数据的基本单位, 又叫记录
数据项
数据中的最小单位
数据类型
对数据元素取值范围和运算的限定
例如整型变量的取值范围
![](https://i-blog.csdnimg.cn/blog_migrate/85a2add9a7fac132d5286acedd4d1d68.png)
数据相当于一张表.
数据元素对应着表中每一条书籍的记录 。
数据项对应着一个列值.
数据类型对应着每一个列值的取值范围。
顺序存储
如果使用一个结构体数组,来存储这个数据,数据是在内存中是连续的 ,所以称为顺序存储
顺序存储查询很快,只要使用数组的索引号查询就行了,但是增删,需要集体的移动,所以增删效率较低。
链式存储
如果使用的是结构体链表存储这个数据,每一个结构体中存放了相邻结构体的地址形成链状结构,数据在内存中的位置是离散的,通过地址链接起来,则为链式存储。
链式存储,增删效率更高,查找效率低一些
![](https://i-blog.csdnimg.cn/blog_migrate/cfe1db180d329e03c35b0b435a90962a.png)
D代表数据 data
S代表结构 struct
图中 D,R分别用用集合和数据对的形式描述了该向量的数据结构
数据结构之间有三种相互关系
逻辑结构
表示数据元素之间的抽象关系
有四种逻辑结构集合结构,线性结构,树形结构 ,图状结构。
存储结构
逻辑结构在计算机内的存储形式。
分为 顺序存储结构,链接存储结构,索引存储结构,散列存储结构
数据运算
对数据结构的操作,如插入,删除,查找,排序等
![](https://i-blog.csdnimg.cn/blog_migrate/36dc92426b3650829c46a48d21aa2deb.png)
图中 每一个圆圈代表一个数据元素 ,线表示数据与数据之间的关系
1.他们之间没有联系 ,只有相同的特点,所以放进一个集合
2.例如上述的图书管理图,他们有前驱和后继的关系 前面一个称前驱 ,后一个称为后继,为线性关系
3.树形关系,数据元素之间,为一对多的关系,可以有一个前驱,和多个后继
前驱称为父节点,后继称为子节点,
一个父节点,多个子节点,每一个节点为一个级别,可理解为越上面级别越高。
4.多对多的关系
这可以说是一个地图染色问题
![](https://i-blog.csdnimg.cn/blog_migrate/6a415ab90b9fba8c17f2d7d0139b978b.png)
![](https://i-blog.csdnimg.cn/blog_migrate/90c22033e8271bb7a09f0afd0966e43d.png)
因为第一个同学报名了A B E 三个项目
所以这三个项目同时比赛,肯定是冲突的
连线表示不能同时进行大项目
那么 A - B , B -E , A -E 连上
地图染色法
使用每一个颜色代表 一个,比赛的时间,染上同一个颜色的点为可以在同一个时间竞赛的项目
得到 4个比赛时间 AC BD E F
步骤:
先染色顶点 ,使用尽量少的颜色 ,对顶点染色
相连的两个顶点不能染同一个颜色 只有C没有和A相连,所以A 和C可以同色
接着看B 与她相连的 E F 排除AC 那么只有D不相连,染同色
最终抽象成上面这个关系图
和树状结构相比 图状结构有环(闭合),而树状结构无环(开放)
所谓环,例如 ABEFA 一个环 ABFA 一个环
所以树状结构可以说是图状结构的特例 :树是有项但无环的图状
这样树的算法可以用到图里。