几种树形结构的总结

数据结构是相互之间存在一种或多种特定关系的数据元素的集合。

数据结构包含三方面的内容:逻辑结构、存储结构和数据的运算。数据的逻辑结构与存储结构是密不可分的两个方面,一个算法的设计取决于所选定的逻辑结构,而算法的实现依赖于所采用的的存储结构。逻辑结构(线性结构与非线性结构)存储结构(顺序存储、链式存储、索引存储、散列存储)

线性结构

数据元素之间存在一对一的关系

 

线性表 栈、队列、数组、串

线性表是具有相同数据类型的n个数据元素的有序序列

 

顺序表:物理顺序(内存的分配顺序)逻辑顺序(元素占用内存的顺序)一致

 

如图 通过首地址和元素序号可以在O(1)时间内找到指定元素

但也因为俩顺序一致所以插入和删除的话都得往后移动元素

顺序表用数组实现 顺序表的特点即是数组的特点

 

链表 不要求物理顺序(内存的分配顺序)逻辑顺序(元素占用内存的顺序)一致 对链表的操作只要修改指针即可 。

由于链表的元素是离散的分布在存储空间中,不能直接找到表中的某个特定的结点,查找某个特点的结点时,需要从表头开始遍历,依次查找

以下是双链表的插入操作   LinkedList 采用双链表

 

单链表与双链表各自特点

非线性结构(数据元素之间是一对多或者多对多的关系)

、图等

 

关于树的查找算法比较

 

 

 

 

 

 

 

二叉排序树

左节点的数据值小于根节点  右节点的数值大于根节点

平均查找长度是O(n)

 平衡因子左右子树之差<=1

 

 

平衡二叉树 (特殊的二叉排序树)

平均查找长度是 因为他的平衡二叉树的高度小

平衡二叉树查询的时间复杂度是,查找速度最快和比较次数最少,既然性能已经如此优秀,但为什么实现索引是使用B-Tree而不是二叉查找树,关键因素是查询磁盘IO的次数。

 

数据库索引是存储在磁盘上,当表中的数据量比较大时,索引的大小也跟着增长,达到几个G甚至更多。当我们利用索引进行查询的时候,不可能把索引全部加载到内存中,只能逐一加载每个磁盘页,这里的磁盘页就对应索引树的节点。每个结点加载一次磁盘io,减少磁盘IO的次数就必须要压缩树的高度,让瘦高的树尽量变成矮胖的树,所以B-Tree就在这样伟大的时代背景下诞生了

http://m.elecfans.com/article/662237.html  解释

 

 

B树 又称多路平衡查找树

一棵m叉树

  1. 树中每个结点至多有m棵子树
  2. 若根节点不是终端结点,则至少有两颗子树
  3. 除根结点外所有叶结点至少有m/2棵子树

 

B树图示

 

每个结点的关键字个数1<=n<=m-1

 

B+树图示

 

关键字 1<=n<=m

每个关键字不保存数据,只用来索引  就是说 5 28 65  可以通过P1 P2 P3  在子节点中找到 P1 P2 P3的地址就是5 28 65在子节点中的位置

 

 

 B+树与B-tree树比较

1、B+树中间节点没有卫星数据(索引元素所指向的数据记录),只有索引,而B树每个结点中的每个关键字都有卫星数据;这就意味着同样的大小的磁盘页可以容纳更多节点元素,在相同的数据量下,B+树更加“矮胖”,IO操作更少

2、因为卫星数据的不同,导致查询过程也不同;B树的查找只需找到匹配元素即可,最好情况下查找到根节点,最坏情况下查找到叶子结点,所说性能很不稳定,而B+树每次必须查找到叶子结点,性能稳定

 

 

哈希表存在一种函数映射关系

 

 

解决哈希冲突的方法 1:开放定址法 2 拉链法(hashmap采用)等

红黑树是一种弱平衡二叉树,平衡二叉树采用严格的旋转算法保证平衡,在修改删除元素的时候性能要略低,适用于读取数据频繁而修改较少的场景,红黑树适用于修改较多的场景,Hashmap被认为是修改操作要远多于查询操作的数据结构,因此使用的是红黑树

红黑树的形象介绍 https://blog.csdn.net/qq_36610462/article/details/83277524

猜你喜欢

转载自blog.csdn.net/jswd_50x/article/details/94002138