逻辑结构与物理结构的区别
逻辑结构 | 物理结构 |
---|---|
数据元素之间的逻辑关系 | 数据结构在计算机中的表示 |
分为:线性结构1:1;树形结构1:n;图形结构n:m | 分为:顺序存储、链式存储、索引存储、散列存储 |
- 顺序存储:逻辑上相邻的物理位置上也相邻,随机存取快速,但是只能使用相邻的一整块存储单元,会产生碎片。
- 链式存储:逻辑上相邻的不要求物理位置上也相邻,不会产生碎片但是需要空间在存储指针信息。
- 索引存储:使用额外的索引表来存储元素,检索速度快,但是在增加和删除数据时需要修改索引表。
- 散列存储:使用关键字来计算元素的存储位置,检索速度快但是会产生hash冲突。
算法的五大特征
- 算法:对特定问题求解步骤的一种描述,指令的有限序列,一条指定代表一个或多个操作。
- 有穷性:算法在有穷步后得出结果
- 确定性:每条指令都是有确切的结果
- 可行性:算法可行
- 输入:
- 输出:
栈和队列的区别
栈 | 队列 |
---|---|
只能在一端进行插入和删除操作的线性表 | 在一端进行插入操作在另外一端进行删除操作的线性表 |
先进后出 | 先进先出 |
二叉树和度为2的树的区别
二叉树 | 度为2的树 |
---|---|
左右子树是有次序的不能颠倒 | 左右子树不要求有次序 |
结点度数可以是0,1,2 | 至少有一个度数是2的节点 |
二叉树遍历、树的遍历、森林的遍历、图的遍历
二叉树
- 先序遍历:先访问根节点,再先序遍历左子树,再先序遍历右子树
- 中序遍历:先中序遍历左子树,再访问根节点,再中序遍历右子树
- 后序遍历:先后序遍历左子树,再后序遍历右子树,再访问根节点
树
- 先根遍历:先访问根节点,再按照从左到右顺序遍历根节点中每一个子树,类似于二叉树先序遍历。
- 后根遍历:先按照从左到右顺序遍历根节点中每一个子树,在访问根节点,类似于二叉树的中序遍历
森林
图
- 广度优先遍历:先访问顶点v,然后再去访问与v邻接的各个未被访问的顶点v1,v2,v3…,再去访问它们的邻接顶点,然后再从这些顶点出发,去访问它们的邻接顶点,以此类推,直到所有顶点都被访问为止。
- 深度优先遍历:先访问顶点v,然后访问与v邻接但未被访问的顶点v1,再访问与v1邻接但未被访问的顶点v2,重复上述步骤,当不能继续向下走时,依次退回最近被访问的顶点,若他还有邻接顶点未被访问,继续上述步骤,直到所有顶点都被访问完为止。
普利姆算法与克鲁斯卡尔算法区别
prim | kruskal |
---|---|
从v0顶点出发选择与其最近的顶点v1构成树T1,再选择与T1最近的顶点构成树T2,重复上述过程直到所有顶点都被并入数中为止 | 对图中边上的权值进行从小到大排序,每次选择最小的权值纳入树中,不能构成环否则就不纳入,直到所有顶点都被并入为止 |
稠密图 | 稀疏图 |
O(n2) | O(ElogE) |
满二叉树与完全二叉树的区别
满二叉树 | 完全二叉树 |
---|---|
高度为h的二叉树最多有2^h-1个节点 | 高度为h有n个节点的二叉树,当且仅当每个节点都与高度为h的满二叉树编号为1~n的节点一一对应 |
每层上都是最大节点数 | 除了最后一层每层都是最大节点数 |
满二叉树一定是完全二叉树,完全二叉树不一定是满二叉树。
树与堆的区别
树 | 堆 |
---|---|
在二叉查找树中,左子树比根节点小,右子树比根节点大 | 在大顶堆中,左右子树小于根节点,在小顶堆中,左右子树大于根节点 |
树中节点存储有指针信息 | 堆中节点没有指针信息 |
在二叉树中搜索会比较快 | 堆中搜索会慢很多 |
红黑树的性质
红黑树一种特殊的平衡查找二叉树
- 根节点一定是黑色的
- 叶子结点一定是黑色的
- 一个节点要么是红色的要么是黑色的
- 不存在2个连续的红色节点
- 从任一节点到其每个叶子结点的所有路径上包含相同数目的黑色节点
红黑树的变换规则
- 变颜色:当前节点的父节点是红色,他的叔叔节点也是红色
- 左旋:当前节点的父节点是红色,叔叔节点是黑色,当前节点是右子树
- 右旋:当前节点的父节点是红色,叔叔节点是黑色,单前节点是左子树
B+树与B树的区别
B+ | B |
---|---|
n个关键字有n个分支 | n个关键字有n+1个分支 |
叶节点包含全部关键字信息,非叶节点 只起到索引作用 | 非叶节点也会保存数据 |
内部节点并没有指向关键字具体信息的指针,内部空间比B树更小,所以B+树的磁盘读写代价更低 |
B树的性质和B+树的性质
B树
- 所有节点中具有最大分支数称为B树的阶,m表示
- m阶B树每个节点最多含有m个分支,最多含有m-1个关键字
- 根节点至少含有2个分支
- 非根节点最少含有⌈m/2⌉分支,至少含有⌈m/2⌉-1个关键字
- 所有叶子节节点都在同一层并且不含任何信息
B+树
- innodb存储引擎中的索引结构使用B+树实现
- m阶B+树每个节点最多含有m个分支,最多含有m个关键字
- 非叶根节点至少含有2个分支,其他节点至少含有⌈m/2⌉个子树
- 所有叶节点包含全部关键字信息及指向相应记录的指针,而且叶节点中关键字按照从小到大顺序排列,相邻叶节点链接起来。