C# 链表 二叉树 平衡二叉树 红黑树 B-Tree B+Tree 索引实现

链表=>二叉树=>平衡二叉树=>红黑树=>B-Tree=>B+Tree

1.链表

链表结构是由许多节点构成的,每个节点都包含两部分:

  1.   数据部分:保存该节点的实际数据。
  2.   地址部分:保存的是下一个节点的地址。

链表的特点:

  1. 结点在存储器中的位置是任意的,即逻辑上相邻的数 据元素在物理上不一定相邻
  2. 访问时只能通过头指针进入链表,并通过每个结点的 指针域向后扫描其余结点,所以寻找第一个结点和最后一 个结点所花费的时间不等

链表的优点:

  1. 数据元素的个数可以自由扩充 、插入、删除等操作不必移动数据,只需 修改链接指针,修改效率较

链表的缺点:

  1. 存储密度小 、存取效率不高,必须采用顺序存取,即存 取数据元素时,只能按链表的顺序进行访问 

2.二叉树

由一个根结点及两棵互不相交的、分别称作这个根的左子树和右子树的二叉树组成。这个定义是递归的。由于左、右子树也是二叉树, 因此子树也可为空树。

二叉树在很大程度上解决了这个缺点,二叉树是按值来保存元素,也按值来访问元素。怎么做到呢,和链表一样,二叉树也是由一个个节点组成,不同的是链表用指针将一个个节点串接起来,形成一个链,如果将这个链“拉直”,就像平面中的一条线,是一维的。而二叉树由根节点开始发散,指针分别指向左右两个子节点,像树一样在平面上扩散,是二维的。

二叉排序树是一种比较有用的折衷方案。
数组的搜索比较方便,可以直接用下标,但删除或者插入某些元素就比较麻烦。
链表与之相反,删除和插入元素很快,但查找很慢。
二叉排序树就既有链表的好处,也有数组的好处。
在处理大批量的动态的数据是比较有用。

3.平衡二叉树

平衡二叉树追求绝对平衡

平衡二叉树的目的是为了减少二叉查找树层次,提高查找速度

4.红黑树

红黑树放弃了追求完全平衡,追求大致平衡

红黑树是二叉树的进化体也可以说是平衡二叉树

5.B-Tree

是一种多路搜索树

6.B+Tree

是大多数 MySQL 存储引擎的默认索引类型。因为不再需要进行全表扫描,只需要对树进行搜索即可,所以查找速度快很多。

因为 B+ Tree 的有序性,所以除了用于查找,还可以用于排序和分组

B+ 树是一种树数据结构,是一个n叉树,每个节点通常有多个孩子,一棵B+树包含根节点、内部节点和叶子节点。根节点可能是一个叶子节点,也可能是一个包含两个或两个以上孩子节点的节点。

B+树是应文件系统所需而出的一种B-树的变型树   更适合文件索引系统  在B-树基础上,为叶子结点增加链表指针

7.索引

红黑树等平衡树也可以用来实现索引,但是文件系统及数据库系统普遍采用 B+ Tree 作为索引结构,这是因为使用 B+ 树访问磁盘数据有更高的性能。

posted @ 2020-09-25 08:37  netlock  阅读(314)  评论(0编辑  收藏  举报