Web开发来一发(十)基本数据结构

简单记录部分常见数据结构:

1、二叉树

定义:二叉树是每个结点最多有两个子树的树结构。

由于其最多只有两个节点,基本结构简单,数学上便于统计和计算。

2、二叉堆

定义:二叉堆就是父节点都比子节点大或者小的二叉树。

二叉堆就是有一定排序的二叉树,插入操作的时间复杂度为O(logn),由于经过排序,查找效率比二叉树高。但左右子树没有经过排序,

3、二叉查找树(又称二叉搜索树、二叉排序树)

定义:二叉查找树是满足以下条件的二叉树,若左子树不为空,则左子树上的所有节点的值均小于或等于它的根节点的值;若右子树不为空,则右子树上的所有节点的值均大于或等于他的根节点的值;左、右子树也分别为二叉查找树。

二叉查找树的搜索:从根节点开始搜索,若命中则结束;若比根节点小,则搜索左子树,反之则搜索右子树;依次类推。若左右子树的节点数目差不多,则接近二分查找的效率。

二叉查找树的问题:多次插入删除后,可能会变成线性链表(比如只有右子树),效率会变低。可以在插入和删除加上平衡算法,即得到平衡二叉树。

4、平衡二叉树(AVL树)

定义:平衡二叉树是满足以下条件的二叉查找树,它是一棵空树或左右子树的高度差绝对值不超过1,左右子树都为平衡二叉树。

那么怎么实现平衡二叉树呢?引入了平衡因子,平衡引子 = 左子树高度 - 右子树高度,平衡因子应在-1到1的区间时就说平衡二叉树。若插入删除操作导致不平衡,通过旋转调整,根据插入位置不同,分为LL,LR,RR,RL。

5、红黑树

定义,红黑树是满足以下条件的二叉查找树:

1)每个节点都是带有颜色属性的,节点是红色的或者黑色的;

2)根节点是黑色的;

3)叶子节点是黑色的;

4)红色节点的子节点均为黑(即红节点不能连续);

5)任一节点到每个叶子的所有路径包含相同数量的黑色节点;

由于从根到叶子的最长的可能路径不多于最短的可能路径的两倍长,因此红黑树大致上是平衡的。

红黑树的插入操作:

1)新插入的节点都是红色的。

2)若根节点为空,插入节点为根节点。

3)若插入节点的父节点为黑色,不需要修改颜色。

4)若插入节点的父节点为红色,这是最复杂的情况。若叔父节点为红色,则将父节点和叔父节点都改为黑色。判断祖父节点,若祖父为根节点,则置为黑色,否则置为红色。以此向上递归;若叔父节点为黑色,且插入节点和父节点在同一边,则将父节点置为黑色,祖父节点置为红色,以祖父节点为基准进行 右旋(或左旋);若叔父节点为黑色,且插入节点和父节点不在同一边,则以父节点为基准进行左旋(右旋),然后以父节点作为插入节点的情况进行后续判断。

6、B-Tree(B树)

定义:B-Tree是一种所有叶子节点位于同一层多路搜索树,并非二叉树。

使用B-tree结构可以显著减少定位记录时所经历的中间过程,从而加快存取速度。一般用于数据库的索引,综合效率较高。

7、B+Tree

与B-Tree区别在于数据都在叶子节点,且每个叶子节点都有一个指向下一个叶子节点的指针。

B+Tree以看作是B树的一种变形,在实现文件索引结构方面比B树使用得更普遍。

8、B*Tree

B*Tree在B+Tree的非根和叶子节点增加指向兄弟的指针。B*树分配新结点的概率比B+树要低,空间使用率更高。

 

 

猜你喜欢

转载自blog.csdn.net/ss1300460973/article/details/86064254