栈:先进后出
栈的应用:
举个例子,中缀表达式:2 * ( 3 + 5 ) + 7 / 1 - 4 转后缀
中缀:2 * ( 3 + 5 ) + 7 / 1 - 4
后缀:2
栈:空
(数字直接写入后缀)
中缀:2 * ( 3 + 5 ) + 7 / 1 - 4
后缀:2
栈:*
(栈空直接入栈)
中缀:2 * ( 3 + 5 ) + 7 / 1 - 4
后缀:2
栈: (*
(左括号直接入栈)
中缀:2 * ( 3 + 5 ) + 7 / 1 - 4
后缀:2 3
栈: (*
(数字直接写入后缀)
中缀:2 * ( 3 + 5 ) + 7 / 1 - 4
后缀:2 3
栈: ( +*
(左括号 = 空栈,空栈直接入栈)
中缀:2 * ( 3 + 5 ) + 7 / 1 - 4
后缀:2 3 5
栈: ( +*
(数字直接写入后缀)
中缀:2 * ( 3 + 5 ) + 7 / 1 - 4
后缀:2 3 5 +
栈:*
(操作符出栈写入后缀,直到左括号)
中缀:2 * ( 3 + 5 ) + 7 / 1 - 4
**后缀:2 3 5 + ***
栈:+
(操作符优先级小于等于栈顶,出栈写入;而后栈为空,操作符入栈)
中缀:2 * ( 3 + 5 ) + 7 / 1 - 4
后缀:2 3 5 + * 7
栈:+
(数字直接写入后缀)
中缀:2 * ( 3 + 5 ) + 7 / 1 - 4
后缀:2 3 5 + * 7
栈:+ /
(操作符优先级大于栈顶,直接入栈)
中缀:2 * ( 3 + 5 ) + 7 / 1 - 4
后缀:2 3 5 + * 7 1
栈:+ /
(数字直接写入后缀)
中缀:2 * ( 3 + 5 ) + 7 / 1 - 4
后缀:2 3 5 + * 7 1 / +
栈:-
(操作符优先级小于等于栈顶,出栈写入;而后栈为空,操作符入栈)
中缀:2 * ( 3 + 5 ) + 7 / 1 - 4
后缀:2 3 5 + * 7 1 / + 4
栈:-
(数字直接写入后缀)
中缀:2 * ( 3 + 5 ) + 7 / 1 - 4
后缀:2 3 5 + * 7 1 / + 4 -
(结尾依次出栈即可)
后缀的计算很简单,让数字不断入栈,遇到操作符就从栈中取两个数字计算,再让计算结果重新入栈,循环往复即可
队列:先进先出
队列的种类:
队列的应用:
KMP 算法
例题:模式串 p = “abcabx” 的 next 函数值序列为(以第一个字母序号为 “1” 计算)___
使用方法:最简单通俗易懂求 next 数组的方法 - CSDN 博客
0 a
0 ab
0 abc
1 abca
2 abcab
0 abcabx
分别计算每一层的最大前缀;在前面加一个 0,删去最后一个数,剩下的数全部 + 1 即可。
最终求的:0 1 1 1 2 3
重要概念:
解释一下什么是结点的度:
比如说一个节点没有孩子,他的度为 0;有一个孩子,度为 1;有两个孩子,度为 2。
树的度,看的是整棵树所有的节点,取其中度最大的节点作为树的度。
来看看二叉树的经典问题:
一棵有 124 个叶结点的完全二叉树最多有___个结点
解析:
1、根据二叉树的性质 叶子节点数 = 度为 2 的节点 + 1,因此度为 2 的结点数为 124 -1 = 123
2、而完全二叉树中度为 1 的结点数最多 1 个。
3、因此该完全二叉最多有:124+123+1 = 248 个结点。
深度为 5 的二叉树,其结点数最多为___个
2^(n-1)-1 = 31
当二叉树采用完全二叉树进行存储时(编号从 1 开始),其双亲编号为 k,则其右孩子编号为___
2k+1
根据使用频率,5 个字符的赫夫曼编码不可能是(C)
A. 111,110,10,01,00
B. 000,001,010,011,1
C. 100,11,10,1,0
D. 001,000,01,11,10
解析:
画图,1 往右,0 往左
设给定权值总数有 n 个(权值总数为待编码的字符数,也就是赫夫曼树的叶子结点数),其赫夫曼树的结点总数为(A)
A. 2n-1
B. 2n
C. 2n+1
D. 不能确定
解析:
现场画一棵树推导一下
解析:
通过权值画图(这里权值截图截漏了)
(2)求其加权路径长度 WPL
解析:
将所有节点的权值*深度加在一起就是 WPL
(3)写出每个字符对应的赫夫曼编码
解析:
根据赫夫曼树向左为 0,向右为 1 求出每个字符的编码
以下说法中正确的是(C)
A. 连通分量是无向图中的极小连通子图
B. 有向图的遍历不可采用广度优先搜索方法
C. 连通图的生成树包含了图中所有顶点
D. 对 n 个顶点的连通图 G 来说,如果其中的某个子图有 n 个顶点和 n-1 条边,则该子图一定是 G 的生成树
解析:
A:
连通分量是图中的极大连通子图
B:
肯定可以用
D:
生成树具有连通图的全部 n 个顶点和连接它们的 n-1 条边。
如果它的一个子图有 n 个结点,也有 n-1 条边,但它们没有连接所有顶点,有的地方还出现了回路,则此子图不是生成树。
设图有 n 个顶点和 e 条边:
(1)采用邻接矩阵时,遍历图的顶点所需时间为___
(2)采用邻接表时,遍历图的顶点所需时间为___
解析:
(1)O(N^2)
(2)O(N+e)
设 G 是一个非连通无向图,有 15 条边,则该图至少有___个顶点
解析:
13
(1)邻接矩阵,用表格表示
解析:
二维表格,谁(x)指向谁(y),就是(x,y)
(2)强连通分量,分别写出顶点的集合、连接这些顶点的所有弧的集合
解析:
强连通分量就是:A 节点能到 B 节点,B 节点也能到 A 节点
(3)从顶点 0 出发进行深度优先遍历序列
解析:
从 0 开始遍历每一个节点,visit
(4)从顶点 2 出发进行广度优先遍历序列
解析:
将没有走过的节点都入队列,走过的节点再次遇到就跳过