数据结构——选择题—查漏补缺

基本概念

时间复杂度

(i=i*2)外层循环次数为 log₂n,(j<i)内层循环次数为 1+2+4+...+2^(log₂n) ≈ 2n,因此总时间复杂度为 O(n)。

初始时队列为空,front和rear应指向同一位置(通常为0),且第一个元素入队时直接放入A[0],rear后移。

循环队列的元素个数为 (rear - front + M) % M

rear的计算公式为 (front + size) % M

出队是front+ ,入队是rear+ 。然后两个都要对队列大小取余

注意看题目,是一个队列 不是两个开口不一样的队列

子串个数

算数表达

考虑计算式的优先级 谁先算

入栈时,注意top的初值:若为0,则++;若为某一数值,则--。

出栈后的计算结果不再入栈,接着跟着后面的算,位于第二位操作数

稀疏矩阵

保存行列数即可

链表

插入s

先连接p后面的,再让s连上p

删首尾元素

链接地址即指向下一个元素的地址

如图 a-e变成了a-f,则链接地址从1010变到f的1014了。f-e则为e的地址1010

答案为c

删除循环双链表p节点:

插到头结点之后

上三角-行优先

坐标(6,6),前五行之和为50

结点

无右孩子结点数 = 非叶结点数 = 2011 - 116 = 1895

按照经过每个结点的顺序 即为排序顺序

前中后------左下右,都从根节点出发

前序:中左右

无图判断排序

根节点右边就是右子树的所有节点

除开根节点,第一个是左子树的根节点 在中序中 左边就是左子树

变得就是根节点

二叉树

根据度分别求和的别忘记加上根节点1=总结点数

二叉排序树

进入的节点和根节点、父节点比较,大往右,小往左

左子树完全小于根节点

右子树大于根节点

查找路径

对于路径上的每个节点,后续节点要么全部小于它(左子树),要么全部大于它(右子树)

给出的大小按照中序遍历输出

完全二叉树

叶节点向上取整,非叶结点向下取整

平衡二叉树

平衡因子定义为:左子树高度 - 右子树高度

求平衡因子=0的分支节点,直接总结点数-叶节点

左旋示范

最终

三叉树

最少结点数 Nmin=3的h-1次/2

森林

注意题目所问的F,是森林,则本题选D

哈夫曼树

结点数

哈夫曼树的总结点数 = 叶子结点数 + 内部结点数 = n + (n - 1) = 2n - 1

哈夫曼编码

前缀编码不能是其他编码的前缀

差不多大的可以放在同一行

最小带权路径WPL

构建哈夫曼树,乘以层数

加权平均长度

构建哈夫曼树,乘以层数。结果除以元素(频次)

最小生成树

权值和最小,且无环路

Krusal------克鲁斯卡尔算法

边数少

按照权值大小单独连

按照边的权值大小,以次(按从小到大的顺序)把节点连起来,只要连通,就不必走完权值大小的尽头(最大的那个),不可以构成回路

相同权值大小,只要不构成回来,可以都连上,权值小的优先

Prim

节点少的情况

把找到的节点当成整体

从当前节点出发,找连接的结点中,权值最小的那个结点,把这两个结点当成一个整体,再以次求最小权值和。注意 不可形成回路

连通

强连通

删掉入度 / 出度为0的点。以此删去,剩下的不能再删的整体,为一个强连通分量。被删掉的顶点各为1位强连通分量

完全图

任意两个顶点之间都有边

保证连通

最少n-1,最大Cn2(组合)

确保 即Cn2 -1

保证(确保) n个顶点的无向图连通的最少边数为

相当于排列组合?

确保强连通

确保连通的结果*2

根据邻接矩阵,判断顶点的度数------画图,记边数,有向则都要记

广度

以顶点0为原点,把绳子拉直,一层一层读取

深度DFS

进入死胡同则后退一步回到上一个节点

DJ最短路径

纳入整体,再更新,大小,链接不到先放无穷

注意题目所问的是出现的顶点,而不是每个顶点的最短路径大小

先按照题目所给,再更新

拓扑排序

AOE关键路径

关键路径是从源点到汇点路径长度最长的路径,决定了工程的最短工期

关键活动的延迟会导致工期延长

查找

折半次数

排序

大概原理

1.选择排序

2.冒泡排序

重复比较相邻的

3.快速排序

适合顺序存储,要排序的数据已经基本有序的情况下不利

不一定选择最中间的

4.插入排序

5.希尔排序

按照增量序列分组,再进行插入排序

6.归并排序

先两两分组,进行过一趟以后不一定能选出一个放在最终位置

简单选择排序:每次选一个最小的数和第1(2 、3....)交换位置

3为排序:假装第一个不存在 从左找一个比原来大的,从右找一个比原来小的。大的和小的交换位置,小的和原来的交换位置

堆排序

把小的往上提

堆排序

其实是二叉树

大根堆、小根堆

大根堆删去顶端后,把最小的放到根节点,然后再进行比较

小根堆操作与之相反

给定序列------固定序列。

加入数据,自己建树,边建边改。填充的时候也要以此填充,如下图

大根堆排序

排序从(n/2)向下取整个节点开始比较,若子节点大,则交换,然后按照前面的顺序,以次比较

大根堆:最大的在上面,出去得到由大到小的排序

小跟堆 最小的在上面,由小到大

拓扑排序

基本规则:

  • 选择一个无前驱的顶点(入度为0),输出并删除其出边。

  • 重复直到所有顶点输出

哈希函数 散列

二次探测

不是单纯的+1往后退了

二次探测的增量序列为:1, -1, 4, -4, 9, -9, ...(即 ±i²,i=1,2,3,...)

优劣

数据表中有10000个元素,如果仅要求求出其中最大的10个元素,则采用( 堆排序)算法最节省时间

相关推荐
泥泞开出花朵1 小时前
LRU缓存淘汰算法的详细介绍与具体实现
java·数据结构·后端·算法·缓存
KarrySmile2 小时前
Day17--二叉树--654. 最大二叉树,617. 合并二叉树,700. 二叉搜索树中的搜索,98. 验证二叉搜索树
数据结构·算法·二叉树·二叉搜索树·合并二叉树·最大二叉树·验证二叉搜索树
凤年徐2 小时前
【数据结构与算法】21.合并两个有序链表(LeetCode)
c语言·数据结构·c++·笔记·算法·链表
程序员老冯头2 小时前
第三十二节 MATLAB函数
数据结构·算法·matlab
lifallen2 小时前
hadoop.yarn 带时间的LRU 延迟删除
java·大数据·数据结构·hadoop·分布式·算法
摸鱼仙人~6 小时前
Redis 数据结构全景解析
数据结构·数据库·redis
玄月初二丶13 小时前
28. 找出字符串中第一个匹配项的下标
c语言·开发语言·数据结构·算法
屁股割了还要学15 小时前
【数据结构入门】时间、空间复杂度的计算
c语言·开发语言·数据结构·c++·算法
秋难降17 小时前
栈:从基础概念到实战解题(详细)
数据结构·算法·排序算法
归云鹤17 小时前
QT信号和槽怎么传输自己定义的数据结构
开发语言·数据结构·qt