http://csivisdev.cnsuning.com:8080/
数据结构:
什么是数据结构?
常见的数据结构
物理结构
逻辑结构
存储结构
元素的查找
基本概念
数据: 图像 声音 文字等
数据元素:数据的基本单位
数据对象:数据的子集 性质相同的数据元素的集合
数据结构:相互之间存在一种或多种关系的元素集合
基本数据结构(逻辑分类):
集合
线性结构
树形结构
图状结构或者网状结构
Data_Structure=(D,S)
D:表示数据元素的集合
S:表示数据元素之间关系的集合
eg:
complex={C,R}
C={c1,c2} c1 实数 c2 虚数
R={R} {
物理分类(物理上的存储结构):
顺序存储结构
链式存储结构
抽象数据类型(ADT):一个数学模型 以及定义在该模型上的一组操作
简化:数据+操作 (D,S,P) 元素 关系 操作
算法:
对特定问题求解步骤的一种描述
特性
有穷性
确定性
可行性
输入
输出
时间复杂度
空间复杂度
(暂时先不去进行考虑)
线性表:
元素
关系
操作 增删改查
线性存储的优点:查找方便 插入 删除需要移动很多元素比较麻烦
单向链表
循环链表
双向链表
3 栈和队列(特殊的线性结构)
属于常见的线性结构 (特殊的线性表)
栈:只能在尾部进行插入删除的特殊的线性表(后进先出)
队列:先进先出 只允许下在表的一端插入元素 在另一端删除元素
4 串[字符串]
5 数组
6 树和二叉树
树的基本术语
度 节点拥有的子树的个数
叶子:度为0的节点
森林:m棵不相交的树的集合
孩子 双亲
红黑树
特殊的树:二叉树
每个节点最多只有两个子数 二叉树中不存在度数大于2的节点
左右区分
完全二叉树
满二叉树
深度为k 总节点个数是2^k-1的二叉树(满的树)
二叉树的特点:
1 i层最多有2^(i-1)个节点
2 深度为k的二叉树最多有2^k -1个节点
3 对任何一颗二叉树T 如果终节点数为n0 度为2的节点数为n2 那么n0=n2+1
4
基本上都喜欢对完全二叉树进行操作
二叉树的存储结构
顺序存储结构【自上而下从左到右存储】
链式存储结构
根左右 二叉链表 三叉链表
二叉树的遍历
三种方案
先序遍历 根左右
中序遍历 左根右
后序遍历 左右根
通过上述的遍历方式将二叉树整理成一个线性的序列然后存储线性序列
如果想要获取线性序列中的前驱跟后驱 就需要再加两个标示位 引出线索二叉树的概念
线索二叉树
树跟森林
树的存储方式
1 双亲标示法
2 孩子标示法
3 孩子兄弟标示法(利用二叉树来进行实现)
森林跟二叉树的转换
所有的树都可以用二叉树链表的方式来进行实现物理存储
森林同样可以转换为二叉树
非常神奇的一种数据结构
红黑树
数据结构到此就暂时停止往下继续深入进去
复习巩固
B+ B- 234树 红黑树
树 森林 二叉树之间的转换
最优二叉树 哈夫曼树
扩展
多分叉树
常规的二叉树只有一个数据项 两个子节点 多分叉树有多个数据项 多个子节点
是什么?
2-3-4树是一种特殊的多分叉树 3个数据项 4个子节点
含义
2-3-4树中的2、3、4的含义指的是一个节点可能含有的子节点数。对非叶节点有三种可能的情况:
· 有一个数据项的节点总是有两个子节点
· 有两个数据项的节点总是有三个子节点
· 有三个数据项的节点总是有四个子节点
跟红黑树一样也是一个平衡树 效率比红黑树稍微差 编程容易点
数据特性:
数据项1 数据项2 数据项3
节点1 节点2 节点3 节点4
· 根是 节点1的子树的所有子节点的关键字值小于数据项1;
· 根是 节点2 的子树的所有子节点的关键字值大于数据项1并且小于数据项2;
· 根是 节点3 的子树的所有子节点的关键字值大于数据项2并且小于数据项3;
· 根是 节点4 的子树的所有子节点的关键字值大于数据项3。
插入:插入的值落到最底层作为叶子节点,在查找插入的位置的时候如果遇到节点数据项满了的情况,需要进行节点分裂
节点分裂
根分裂
红黑树
是一个平衡二叉树
特性:
1 每个节点要么是红色,要么是黑色。
2 根节点必须是黑色
3 红色节点不能连续(也即是,红色节点的孩子和父亲都不能是红色)。
4 对于每个节点,从该点至null(树尾端)的任何路径,都含有相同个数的黑色节点。
集成了平衡二叉树的特性 但是又多了红黑特性,因此在增删的时候需要进行修复使改变后的二叉树还是红黑树
旋转+变色
使用的地方TreeMap
https://www.cnblogs.com/CarpenterLee/p/5503882.html
红黑树 2-3-4树的比较
底层的数据结构 算法的时间复杂度 空间复杂
2-3-4树的操作
为什么要引入这么一个概念
什么叫平衡树?
今天的要求:
234树 红黑树
明天 B+ B-
完全二叉树
B树
B树,概括来说是一个一般化的二叉查找树(binary search tree),可以拥有多于2个子节点
这种数据结构常被应用在数据库和文件系统的实现上。
二叉查找树 也称之为有序二叉树 就是给二叉树节点中的数据加上大小属性
查找的方式 类似于二分查找法
最大最小值 最左最小 最右最大
二叉树的平衡 平衡是什么意思?
替身删除
增 删 改 查
所遇到的一些问题点:
内部类
节
为什么引出了一个平衡的概念?
因为其时间复杂度是基于平衡来说的,但是我们往往会考虑其最差的情况
有可能其时间复杂度是N,插入和删除操作可能会导致二叉树不平衡,往那种极端的情况
去发展
Binary Search Tree 简称BST
二叉查找树也称他为有序二叉树
平衡查找树能够保证在最差的情况下保持平衡使得其复杂度保持一致
2-3树定义
数据项1-2 子节点1-3
数据项是1子节点是2
数据项是2的子节点是3
叶子节点都在最下一层,通过这个保证了树额平衡
继承了有序二叉树的特性 左节点值小于数据项1 中节点介于数据项1 2之间 右节点大于数据项2
查找跟二叉查找树的一样 类似于二分法
插入比较麻烦需要进行分裂处理
B树:
定义:
1、根结点至少有两个子女;
2、每个非根节点所包含的关键字个数 j 满足:┌m/2┐ - 1 <= j <= m - 1;
3、除根结点以外的所有结点(不包括叶子结点)的度数正好是关键字总数加1,故内部子树个数 k 满足:┌m/2┐ <= k <= m ;
4、所有的叶子结点都位于同一层。
PS:m是阶数
两种定义方式
根节点至少有两个子节点
每个节点有M-1个key,并且以升序排列
位于M-1和M key的子节点的值位于M-1 和M key对应的Value之间
其它节点至少有M/2个子节点
B+树
数据结构
多线程
kafka
redis
线程池
定时任务
集合的底层实现
GC
springcloud springboot
mycat分表分库
RPC框架
hbase
项目梳理
2148586198
帮助产品完善KBA侦测引擎模块的需求
反洗钱生产问题
数据结构方面还还是要做到
端午节还是要做到
视图 索引
参考文献
https://www.cnblogs.com/yangecnu/p/Introduce-Red-Black-Tree.html