数据结构
- 数据的关系,叫做结构
- 线性结构 - 数据元素之间为一对一关系;
- 线性结构 - 线性表
- 顺序存储结构的线性表称为顺序表,链式存储的线性表称为链表
- 顺序表是将数据按顺序保存到内存中,因此在顺序表中存取数据很方便,但同时也带来一些问题,例如,向顺序表中插入元素时,需要移动大量的数据,链表中每个节点都应包括两个部分:一部分是实际数据,另一部分是下一个节点的地址
- 每个节点中只包含一个指针,一般称为单向链表。若每个节点包含两个指针,一个指向下一个节点,另一个指向上一个节点,称为双向链表
树形结构和网状结构
- 树形结构:数据元素之间为一对多关系;
- 网状结构:数据元素之间为多对多关系。
树的表示方法1 集合表示
// 前边表示元素集合,后边表示元素关系
二元组:T = ({
A,B,C,D,E,F,G,H,I },{
<A,B> ,<A ,C>,<B,D>,<B,E>,<B,F>,<C,G>,<E,H>,<E,I>})
树的表示方法2 分支图
树的表示方法2 长短柱形图
树的特点
- 空集合也是树,叫空树
- 单个节点也是树,树根就是节点本身
- 在树中,只有根节点没有前驱,除了根节点,每个只有一个前驱
- 父节点、子节点、兄弟节点
- 节点的度就是节点子节点的数量
- 树的度,子节点中最大的度
- 树中度为0的是叶节点和终端节点
- 树中度不是0的叫做分支节点和非终端节点
- 节点的层数,就是第几层,根节点第一层
- 树的深度,就是最大层级
- 有序树和无序树,子节点是否按照顺序从左往右排
森林
n颗互不相交的树的集合,对于树的某个节点,它的子树都是森林,
二叉树
- 二叉树 最多有2个子节点的树
- 树的节点没有左右之分,二叉树有左右节点之分 ,所以二叉树是有序树
二叉树性质
- 总节点数 = 度0数 + 度1数 + 度2数
- 总节点数 - 1 = 分支数
- 分支数 = 2 * 度2数 + 度1数
- 第n层的节点总数最多是 2 n-1个
- 深度为n二叉树,当前层最多 2n - 1个, 总节点数最少n个节点, 最多是 (2 n-1个)
- 度为2的节点数是b,叶节点数 b+1个
满二叉树 深度为n
- 在一棵二叉树中,如果所有分支结点都存在左子树和右子树,并且所有叶子结点都在同一层上,这样的一棵二叉树称为满二叉树。
- 没有度1节点
- 每层左边第一个编号是 2 n-1个
- 最大编号就总个数
- 叶子数 = Math.ceil(总节点数 / 2)
完全二叉树
- 叶子结点只能出现在最下层和次下层,且最下层的叶子结点在树的左部
- 具有n个节点的完全二叉树的深度k为:k = [log2n]+1 (第k层第一个是 2 的k-1 次方 下一层是 2 的 k次方, n的大小在两者之间 )
- 完全二叉树,从上到下,从左到右编号,一个节点号是 n , 左孩子是2n(如果有) ,右孩子是2n +1 (如果有),双亲编号 n/2