常用的数据结构 |
|||
|
特点 |
优缺点 |
|
数组 |
1、内存连续 2、所有数据类型相同 3、数组的大小固定 4、线性结构 |
支持随机访问; 插入和删除效率低; |
|
链表 |
1、内存不连续 2、线性结构 |
不支持随机访问; 插入和删除效率高; |
|
栈 |
1、先进后出 2、只能在表的一端插入和删除元素 3、线性结构 |
|
|
队列 |
1、先进先进 2、只能在表的一端插入,在表的另一端删除 3、线性结构 |
|
|
树 |
二叉树 |
1、每个结点最多有两个子树的树结构(通常子树被称为左子树和又子树) |
|
满二叉树 |
1、一颗深度为k,且有2^k - 1个节点的二叉树,称为满二叉树 2、每一层上的结点树都是最大结点树 |
|
|
完成二叉树 |
1、除最后一层外,若其余层都是满的,并且或者最后一层是满的,或者是在右边缺少连续若干结点; 2、具有n个节点的完全二叉树的深度为floor(log2n) + 1; 3、深度为k的完全二叉树,至少有2k-1个叶子结点,至多有2k -1个节点; |
|
|
二叉搜索树(二叉排序树或二叉查找树) |
1、若它的左子树不为空,则左子树上所有结点的值都小于根结点的值; 2、若它的右子树不为空,则右子树上所有结点的值都大于根结点的值; 3、它的左右子树也分别是二叉搜索树; |
二叉搜索树可能退化成链表(如:5,6,7,8,9) |
|
平衡二叉树(在二叉树的基础上增加了平衡的概念) |
1、左子树和右子树都是平衡二叉树,且左子树和右子树的深度之差的绝对值不超过1; |
解决二叉树退化成链表而诞生; |
|
平衡二叉查找树(在二叉查找树的基础上增加了平衡的概念) |
1、左子树和右子树高度之差的绝对值不超过1; 2、树的左子树和右子树都是平衡二叉查找树;
|
解决二叉搜索树退化成链表而诞生; |
|
红黑树 (在二叉查找树的基础上增加了平衡的概念) |
1、每个结点是红色或黑色; 2、根结点是黑色; 3、每个叶子结点(NULL)是黑色;(该叶子结点为是指为空的叶子结点) 4、如果一个结点是红色,则它的子结点必须是黑色的; 5、从一个结点到该结点的子孙结点的所有路径上包含相同数目的黑色结点; |
解决平衡二叉查找树插入和删除需要进行多次(次数不能确定)旋转才能达到平衡;红黑树插入和删除结点时,最多只需要三次旋转就能到达平衡; |
|
|
B-树 |
|
|
|
B+树 |
|