数据结构_链表
1.查询慢
2.增删快
链表中的每一个元素也称为一个节点
一个节点包含了一个数据源(存储数组),两个指针域(存储地址)
【自己的地址】【数据】【下一个节点的地址】
单向链表:链表中只有一条链子,不能保证顺序
双向链表:链表中只有二条链子,保证顺序
二叉树:分支不能超过两个
【排序树/查找树】
在二叉树的基础上,元素是有大小顺序的,左子树小,右子树大
【平衡树】:左孩子和右孩子相等
【不平衡树】
【红黑树】:趋近于平衡树,查询速度非常的快,查询叶子节点最大次数和最小次数不能超过2倍
约束:
1.节点可以是红色的或者是黑色的
2.根节点是黑色的
3.叶子节点(空节点)是黑色的
4.每个红色的节点的子节点都是黑色的
5.任何一个节点到其每一个叶子节点的所有路径上黑色节点相同
前序:根左右
中序:左根右
后续:左右根
把一个子树作为一个整体
查找算法:
暴力:遍历
二分:前提条件:有序 B+树的基础算法
哈希:最高效o(1) jdk 1.8链表加红黑树(处理hash冲突)
哈希冲突的产生原因
哈希是通过对数据进行再压缩,提高效率的一种解决方法。但由于通过哈希函数产生的哈希值是有限的,而数据可能比较多,导致经过哈希函数处理后仍然有不同的数据对应相同的哈希值。这时候就产生了哈希冲突。
插值:
索引:搜索索引
bfs&dfs:
平衡树:
B+树:
B-Tree:
红黑树:高效的查找:
底层数据结构:特殊的查找树(自平衡的二叉查找树)
1.每个节点不是红色就是黑色
2.不可能有连在一起的”红色“节点
3.根节点都是黑色
4.每个红色结点的两个子节点都是黑色,叶子节点都是黑色;
出度为0满足了性质就可以近似的平衡,不一定要红黑,可以为其他的
变化规则
1.变颜色(父节点,叔叔节点,祖父节点变色)
当前节点的父亲是红色,且它的祖节点的另一个子节点也是红色(叔叔节点)
2.旋转(左旋,右旋):
左旋:右子树 父节点是红色,叔叔节点黑色 以父节点作为左旋
右旋:父节点红色,叔叔黑色,右旋
缺点:
1.读取磁盘的次数过多
B树:B-tree,B+Tree balance tree
B树 N叉的排序树
1.节点最多含有m颗子树(指针)m-1个关键字(数据)
2.除根节点和叶子节点外,其他每个节点至少有ceil(m/2)个子节点
3.若根节点不是叶子节点,则至少有两颗子树
4.ceil为取数 当数据=时分裂从中间分开,分成两颗子树
n》= ceil(m/2)
B+树(双向链表) 有利于范围查询
1.叶子节点连起来了
2.非叶子节点不存数据
3.数据和节点一样多