算法学习
文章平均质量分 66
空之箱大战春日影
また会いましょう 約束だから —灰の魔女
展开
-
《算法笔记》读书记录DAY_64
CHAPTER_12 提高篇(6)——字符串专题12.2.3 KMP算法在理解了next数组的求解过程的基础上,正式进入KMP算法的讲解。《算法笔记》对整个KMP匹配进行了详细地阐述:可以总结出KMP算法的思路:(1)初始化j=-1,表示patten当前已匹配的最后一位。(2)让 i 遍历文本串text,对于每个 i ,执行(3)(4)。(3)不断令j=next[j],直到 j 退回-1,或是text[i]==pattern[j+1]。(4)如果text[i]=.原创 2021-11-20 21:31:13 · 148 阅读 · 0 评论 -
《算法笔记》读书记录DAY_62
CHAPTER_12 提高篇(6)——字符串专题12.2.1 字符串匹配问题本节主要讨论字符串匹配的问题,如果给出两个字符串text和pattern,需要判断pattern是否位text的子串。一般把text称作文本串,把pattern称作模式串。字符串匹配的暴力解法很容易想到,只需要枚举文本串的起始位置 i ,然后从该位开始逐位与模式串进行匹配,如果匹配过程中每一位都相同,则匹配成功;否则,只要出现某位不同,就让文本串的起始位置变为 i+1,并从头开始模式串的匹配。这种做法时间复杂度.原创 2021-11-20 18:20:39 · 323 阅读 · 0 评论 -
《算法笔记》读书记录DAY_61
CHAPTER_12 提高篇(6)——字符串专题12.1 字符串hash进阶(续上节)我们现在重新用字符串hash+二分的方法来解决11.5节中的最长回文子串的问题。题目:给出一个字符串S,字母区分大小写,求S的最大回文子串的长度输入样例:PATZJUJZTACCBCC输出样例:9 //最长回文子串为ATZJUJZTA,长度为9思路:对于一个给定的字符串str,可以先求出其字符串hash数组H1,然后再将str反转,求出反转字符串...原创 2021-11-18 16:05:51 · 76 阅读 · 0 评论 -
《算法笔记》读书记录DAY_60
CHAPTER_12 提高篇(6)——字符串专题12.1 字符串hash进阶(1)在4.2节中我们层曾提到字符串hash,字符串hash是指将一个字符串S映射为一个整数。在之前的介绍中,我们将一个n位字符串看作一个n位26进制数,即字母a~z代表0~25,然后使用进制转换的方式将其转换成p进制数(一般是十进制)完成映射。然而这种方式不适用于长度较大的字符串,因为转换出的整数也会很大,为了应对这种情况,我们只能舍弃一些"唯一性",即对一个转换得到的整数mod取模。这样成功使整数变小,...原创 2021-11-17 20:03:07 · 515 阅读 · 0 评论 -
《算法笔记》读书记录DAY_59
CHAPTER_11 提高篇(5)——动态规划11.7.3 完全背包问题完全背包问题叙述如下:有n种物品,每种物品的单件重量为w[i],价值为c[i]。现有一个容量为V的背包,问如何选取物品放入背包,使得背包内物品的总价值最大。其中每种物品有无数件。其中所有数据都为正整数。可以看出,完全背包和01背包问题的唯一区别在于每种物品的数量有无数件。因此我们的动态规划策略也要做出一些改变。令dp[i][v]表示前 i 件物品恰好放入容量为v的背包中能获得的最大价值。对每种物品,同样有两.原创 2021-11-16 22:34:43 · 68 阅读 · 0 评论 -
《算法笔记》读书记录DAY_58
CHAPTER_11 提高篇(5)——动态规划11.7.1 多阶段动态规划问题有一类动态规划可解的问题,它可以描述成若干个有序的阶段,且每个阶段的状态只和上个阶段有关,一般把这类问题称为多阶段动态规划问题。01背包问题就是个典型的多阶段动态规划问题。11.7.2 01背包问题我们来看01背包问题。题目:有n件物品,每件物品的重量为w[i],价值为c[i]。现有一个容量为V的背包,问如何选取物品放入背包,使得背包内物品的总价值最大。其中每种物品只有1件。输入样例:..原创 2021-11-15 20:54:56 · 552 阅读 · 0 评论 -
《算法笔记》读书记录DAY_57
CHAPTER_11 提高篇(5)——动态规划11.6DAG最长路径在10.6.1节已经介绍过,DAG就是有向无环图,并且在10.7.3节中已经讨论如何求解DAG中的最长路径,也就是“关键路径”的求法。这里介绍利用动态规划来求DAG最大路径的做法。本节着重解决两个问题:(1)求解整个DAG中的最长路径(即不固定起点和终点)。(2)固定终点,求DAG的最长路径。先讨论第一个问题:给定一个有向无环图,怎样求解整个图中的所有路径权值之和最大的那一条。...原创 2021-11-14 13:30:05 · 1171 阅读 · 0 评论 -
《算法笔记》读书记录DAY_56
CHAPTER_11 提高篇(5)——动态规划11.5最长回文子串回文串是一个正读和反读都一样的字符串,即是一个左右对称的串。下面来看最长回文子串的问题。题目:给出一个字符串S,字母区分大小写,求S的最大回文子串的长度。输入样例:PATZJUJZTACCBCC输出样例:9 //最长回文子串为ATZJUJZTA,长度为9思路:如果采用暴力的揭发,枚举左右端点,然后判断区间[ i , j ]内的子串是否回文。这么做的时间复杂度为O...原创 2021-11-12 21:17:43 · 440 阅读 · 0 评论 -
《算法笔记》读书记录DAY_55
CHAPTER_11 提高篇(5)——动态规划11.4最长公共子序列(LCS)我们来看最长公共子序列(LCS)问题。题目:给定两个字符串(或数字序列)A和B,求一个字符串,使得这个字符串是A和B的最长公共部分。例如:字符串“sadstory”与"adminsorry"的最长公共子序列为"adsory",长度为6。输入样例:sadstoryadminsorry输出样例:6思路:我们采用动态规划的做法来解LCS问题。令dp[i][j]表示字符.原创 2021-11-11 19:40:13 · 214 阅读 · 0 评论 -
《算法笔记》读书记录DAY_54
CHAPTER_11 提高篇(5)——动态规划11.2最大连续子序列和原创 2021-11-10 17:11:57 · 195 阅读 · 0 评论 -
《算法笔记》读书记录DAY_53
CHAPTER_11 提高篇(5)——动态规划11.1.1动态规划动态规划(DP)是一种用来解决一类最优化问题的算法思想。简单来说,动态规划将一个复杂的问题分解成若干个子问题,通过综合子问题的最优解来得到原问题的最优解。需要注意的是,动态规划会把每个求解过的子问题的解记录下来,这样当下一次碰到同样的子问题时,就可以使用之前记录的结果,而不用重复计算。一般可以使用递归或者递推的写法来实现动态规划,其中递归写法在此处又称作记忆化搜索。11.1.2动态规划的递归写法通过学习DP..原创 2021-11-09 20:21:14 · 284 阅读 · 0 评论 -
《算法笔记》读书记录DAY_52
CHAPTER_10 提高篇(4)——图算法专题10.7.3关键路径由于AOE网实际上是有向无环图,而关键路径是图中的最长路径,因此本节实际上给出了一种求解有向无环图中最长路径的方法。由于关键活动是哪些不允许拖延的活动,因此这些活动的最早开始时间必须等于最迟开始时间。因此设置数组e[r]和l[r]分别表示分别表示活动ar的最早开始时间和最迟开始时间。于是,当求出这两个数组之后,就可以通过判断e[r]==l[r]是否成立来确定r是否为关键活动。如上图所示,事件Vi在经过活动ar之.原创 2021-11-08 20:51:22 · 146 阅读 · 0 评论 -
《算法笔记》读书记录DAY_51
CHAPTER_10 提高篇(4)——图算法专题10.7.1AOV网和AOE网顶点活动网(AOV)是指用顶点表示活动,而用边集表示活动间优先关系的有向图。若网中所有活动均可以排出先后顺序(任两个活动之间均确定先后顺序),则称网是拓扑有序的,求拓扑序列就是求AOV。边活动网(AOE)是指用带权的边集表示活动,而用顶点表示事件的有向图。例如下图,边a1-a6表示需要学习的课程,也就是“活动”;边权表示课程学习需要消耗的时间;顶点V1-V6表示到此刻为止前面的课程已经学完,后面的课程已经可以.原创 2021-11-07 18:31:14 · 127 阅读 · 0 评论 -
《算法笔记》读书记录DAY_50
CHAPTER_10 提高篇(4)——图算法专题10.6.1有向无环图如果一个有向图的任意顶点都无法通过一些有向边回到自身,那么称这个有向图为有向无环图(DAG)。如下给出几个DAG的例子:10.6.2拓扑排序拓扑排序是将有向无环图G的所有顶点排出一个线性序列,使得对图G中的任意两个顶点u和v,如果存在边u->v,那么在序列中u一定能在v的前面。这个序列又被称为拓扑序列。如下图,给出有向图(a),拓扑排序为acbfde。可以看出,这个序列完全符合拓扑排序的定义。.原创 2021-11-06 19:43:32 · 72 阅读 · 0 评论 -
《算法笔记》读书记录DAY_49
CHAPTER_10 提高篇(4)——图算法专题10.4.4Floyd算法Floyd算法(弗洛伊德算法)用来解决全源最短路径问题,即对于给定的图G(V,E),求任意两点u,v之间的最短路径长度,时间复杂度是O(n^3)。由于n^3的时间复杂度很高,因此顶点数n基本被限制在200以内,因此使用邻接矩阵实现Floyd算法非常合适。Floyd算法基于这样一个事实:如果存在顶点 k ,使得以k作为中介点时顶点 i 和顶点 j 的当前最短路径距离缩短,则使用顶点 k 作为顶点 i 和顶点 j ..原创 2021-11-05 19:32:16 · 52 阅读 · 0 评论 -
《算法笔记》读书记录DAY_48
CHAPTER_10 提高篇(4)——图算法专题10.4.3Bellman-Ford算法和SPFA算法前面已经提到,Dijkstra算法无法解决边权为负值的情况。而Bellman-Ford算法同样可以解决单源最短路径问题,也能处理有负边权的情况。现在考虑有向图中的环,也就是从某个顶点出发、经过若干个不同的顶点之后可以回到该顶点的情况。而根据环中边的边权之和的正负,可将环分为零环、正环、负环(如下图所示)。图中零环和正环不会影响最短路径的求解,因为零环和正环不能使最短路径更短。而如...原创 2021-11-04 18:55:04 · 74 阅读 · 0 评论 -
《算法笔记》读书记录DAY_47
CHAPTER_10 提高篇(4)——图算法专题10.4.2Dijkstra算法(接上篇)下面通过一道例题来练习Dijkstra+DFS模板的运用。题目:有N个城市(编号为0-N-1)、M条道路(无向边),每条道路连接两个不同的城市,并给出M条道路的距离属性与花费属性。现在给定起点S与终点D,求从起点到终点的最短路径、最短距离及花费。注意:如果有多条最短路径,则选择花费最小的那条。输入格式:每个输入包含一个测试用例。对于每个测试用例,第一行给出四个整数:城市个...原创 2021-11-03 16:15:31 · 78 阅读 · 0 评论 -
《算法笔记》读书记录DAY_46
CHAPTER_10 提高篇(4)——图算法专题10.4.2Dijkstra算法(接上篇)上面的题目实际是一个多标尺的最短路径问题。何为多标尺?即题目给出了多个衡量标准,为了输出最终结果,我们不但要考虑道路的距离(第一标尺),还需要考虑每个点的点权(第二标尺)和最短路径的数量(第三标尺)。这种情况我们必须对Dijkstra算法做一些改动才能将其他标尺考虑进来,正如上题所做的处理,我们设置数组weight[]和num[]来记录其他标尺的量,并在更新d[]的值的时候用判断条件来更新这些...原创 2021-11-02 11:28:44 · 125 阅读 · 0 评论 -
《算法笔记》读书记录DAY_45
CHAPTER_10 提高篇(4)——图算法专题10.4.2Dijkstra算法(接上篇)下面通过两道例题,练习Dijkstra算法的运用。题目1:给出N个城市(城市用0,1,...,N-1编号),M条无向边,每条边代表连接两个城市的道路,边的权值代表其距离。每个城市中都有一定数目的救援小组,所有边的边权已知。现在给出起点和终点,求从起点到终点的最短路径条数及最短路径上的救援小组数目之和。输入格式:每个输入包含一个测试用例。对于每个测试用例,第一行给出4个正整数:...原创 2021-11-01 23:03:52 · 181 阅读 · 0 评论 -
《算法笔记》读书记录DAY_44
CHAPTER_10 提高篇(4)——图算法专题10.4.1最短路径最短路径是图论中一个很经典的问题:给定图G(V,E),求一条从起点到终点的路径,使得这条路径上经过的所有边的边权之和最小。如下图所示,在从V0到V6的路径中,V0—V1—V4—V6的路径的边权之和等于3,达到最小,因此这条路径称为V0—V6的最短路径。对给定任意的图G(V,E)和起点S、终点T,求其最短路径的常用算法有:Dijkstra、Bellman-Ford、SPFA和Floyd。10.4.2Dij.原创 2021-10-31 22:14:52 · 200 阅读 · 0 评论 -
《算法笔记》读书记录DAY_43
CHAPTER_10 提高篇(4)——图算法专题10.3.2图的遍历—BFS用BFS遍历图,总是以“广度”作为第一关键词,每次以扩散的方式向外访问顶点。和树的BFS一样,使用BFS遍历图需要使用一个队列,通过反复取出队首顶点,将该顶点可到达的未曾加入过队列的顶点全部入队,直到队列为空时遍历结束。我们从A开始,用BFS遍历上面这个有向图,在初始时先要将A入队。当前队列内元素为{0},取出队首元素0,访问该顶点,然后将0出队。然后将所有从A出发能到达并且还未入队的顶点都入队,即B...原创 2021-10-30 20:23:39 · 78 阅读 · 0 评论 -
《算法笔记》读书记录DAY_42
CHAPTER_10 提高篇(4)——图算法专题10.3.1图的遍历—DFS图的遍历是指对图的所有顶点按一定顺序进行访问。用DFS遍历图,总是以“深度”作为第一关键词,每次都是沿着路径到不能再前进时才退回到最近的岔道口。也就是沿着一条路径直到无法继续前进,才退回到路径上离当前顶点最近的还存在为访问分支顶点的岔道口,并前往访问那些未访问的分支顶点。例如上面这个例子,沿着V1、V2、V4、V8、V5走至最深,这时候已经无法继续前进了,这个时候回退到最近的V1分岔口,因为V1还有未访问的.原创 2021-10-30 17:33:48 · 141 阅读 · 0 评论 -
《算法笔记》读书记录DAY_41
CHAPTER_10 提高篇(4)——图算法专题10.1图的定义和相关术语图(Graph)是由顶点和连接顶点的边构成的离散结构。在计算机科学中,图是最灵活的数据结构之一,很多问题都可以使用图模型进行建模求解。图的结构很简单,就是由顶点V集和边E集构成,因此图可以表示成。一般来说,图可以分为有向图和无向图。有向图是所有边都有方向,即确定了一个顶点到另一个顶点的指向;而无向图的所有边都是双向的,即无向图的所有边都是双向的。 ...原创 2021-10-28 11:10:47 · 117 阅读 · 0 评论 -
《算法笔记》读书记录DAY_40
CHAPTER_9 提高篇(3)——数据结构(2)9.8.1哈夫曼树首先来明确两个定义。对于一棵树,我们把叶子节点的权值乘以其路径长度的结果称为这个叶子节点的带权路径长度。例如下图中,叶子节点G的带权路径长度为 3 * 2 = 6 。树的带权路径长度(WPL)等于它所有叶子节点得到带权路径长度之和。对于下面这棵树,其WPL等于3 * 2 + 5 * 2 + 13 * 1 = 29 。我们有如下问题:已知n个数,寻找一棵树,使得树的所有叶子节点的权值为这n个数,并且使得这棵树的带...原创 2021-10-27 17:48:47 · 163 阅读 · 0 评论 -
《算法笔记》读书记录DAY_39
CHAPTER_9 提高篇(3)——数据结构(2)9.7.1堆的定义与基本操作堆是一颗完全二叉树,树中每个节点的值都不小于(或不大于)其左右孩子节点的值。其中,如果父亲节点的值大于或等于孩子节点的值,这样的堆称为大顶堆。如果父亲节点的值小于或等于孩子节点的值,这样的堆称为小顶堆。堆一般用于优先队列的实现,而优先队列默认情况下使用的是大顶堆。通过上图两个堆的示例可以看到,堆是既有完全二叉树的特性,也有属于自己的特性:(1)第i个分支节点的子节点的序号总是 2 * i + ...原创 2021-10-26 17:59:22 · 78 阅读 · 0 评论 -
《算法笔记》读书记录DAY_38
CHAPTER_9 提高篇(3)——数据结构(2)9.6.1并查集的定义并查集是一种维护集合的数据结构。并查集支持下面两个操作:(1)合并:合并两个集合。(2)查找:判断两个元素是否在一个集合。那么并查集是用什么实现的呢?其实就是用一个数组:int father[N];其中father[i]表示元素i的父亲节点,而父亲节点本身也是这个集合内的元素。另外对于father[i]==i,则说明元素i是这个集合的根节点,但对同一个集合来说只存在一个根节点,并将它视作所属集...原创 2021-10-25 15:24:04 · 85 阅读 · 0 评论 -
《算法笔记》读书记录DAY_37
CHAPTER_9 提高篇(3)——数据结构(2)9.5.1平衡二叉树(AVL)的定义原创 2021-10-24 18:09:45 · 67 阅读 · 0 评论 -
《算法笔记》读书记录DAY_36
CHAPTER_9 提高篇(3)——数据结构(2)9.4.3二叉查找树的性质二叉查找树有一个重要性质:对二叉查找树进行中序遍历,遍历的结果是有序的。另外,如果合理地调整二叉查找树的形态,使得每个子树上的节点尽量都有两个孩子,这样整个BST的高低就会尽可能低,即高度大概在log(N)级别,N是节点个数。能实现这个要求的是一颗平衡二叉树(AVL),参考9.5节。下面通过一道例题来练习二叉排序树相关。题目:给出N个正整数作为一颗二叉排序树的结点插入顺序,问:这串序列是否是该二.原创 2021-10-23 16:38:53 · 65 阅读 · 0 评论 -
《算法笔记》读书记录DAY_35
CHAPTER_9 提高篇(3)——数据结构(2)9.4.1二叉查找树的定义二叉查找树(BST)是一种特殊的二叉树,又称为二叉排序树、二叉搜索树。二叉查找树的定义如下:(1)要么二叉查找树是一颗空树。(2)要么二叉查找树由根节点、左子树、右子树构成。其中左子树和右子树都是二叉查找树,且 左子树上所有节点的数据域均小于等于根节点的数据域,右子树上所有节点的数据域均大于 根节点的数据域。上图给出了一个BST的例子。从图中可以看出,二叉...原创 2021-10-22 19:21:30 · 59 阅读 · 0 评论 -
《算法笔记》读书记录DAY_34
CHAPTER_9 提高篇(3)——数据结构(2)9.3.4 从树的遍历看DFS和BFS深度优先搜索与先根遍历回忆树的先根遍历,我们会发现先根遍历就是DFS的过程。实际上,对所有合法的DFS过程,都哦可以把他画成树的形式,此时递归边界等价于树的叶子节点,而分岔口等价于树的非叶子节点。于是我们可以从中得到一些启发:碰到一些可以用DFS的题目,不妨把一些状态作为树的结点。然后问题就会转化为对树的先根遍历。如果想要得到树的某些信息,也可以借用DNFS以深度作为第一关键词进行遍历。例如求解.原创 2021-10-21 23:31:48 · 81 阅读 · 0 评论 -
《算法笔记》读书记录DAY_33
CHAPTER_9 提高篇(3)——数据结构(2)9.3.1 树的静态写法本节讨论一般意义的树,即子节点个数不限且子节点不分先后顺序。一般的树我们可以采取静态的写法。我们不采用链地址的方式来记录子节点位置,而采用数组下标的形式。结构体node定义如下:struct Node { typedef data; //数据域 vector<int> child; //指针域,存放所有孩子结点的下标 }node[maxn];当需要新建一个结点时,就按顺...原创 2021-10-20 10:53:14 · 61 阅读 · 0 评论 -
《算法笔记》读书记录DAY_32
CHAPTER_9 提高篇(3)——数据结构(2)9.2.5 重建二叉树首先我们要给出一个关于二叉树的结论:给定一个中序遍历序列和后序遍历序列,可以确定一颗二叉树;给定中序遍历和后序遍历,也可以确定一个二叉树;给定中序遍历和层序遍历,同样可以确定二叉树。而后序遍历、先序遍历、层序遍历中任意组合,都不能确定二叉树。由此这节我们来解决一个重要问题:给定一个二叉树的先序遍历和中序遍历,如何重建这颗二叉树。已知先序序列为pre1、pre2、... 、pren,中序序列为in1、in2、.....原创 2021-10-19 21:27:19 · 70 阅读 · 0 评论 -
《算法笔记》读书记录DAY_31
CHAPTER_9 提高篇(3)——数据结构(2)这节我们讲解二叉树的遍历。二叉树的遍历是指通过一定顺序访问二叉树的所有结点。遍历方法有四种:先序遍历、中序遍历、后序遍历、层序遍历。下面分别介绍这四种遍历。9.2.1 先序遍历先序遍历采用递归的方式进行,首先要将树分为三个部分:根节点、左子树、右子树。...原创 2021-10-18 12:08:48 · 90 阅读 · 0 评论 -
《算法笔记》读书记录DAY_30
CHAPTER_9 提高篇(3)——数据结构(2)9.1.1 树的定义与性质在计算科学中,树(tree)是一种抽象数据类型或是实现这种抽象数据类型的数据结构,用来模拟具有树状结构性质的数据集合。它是由n(n>0)个有限节点组成一个具有层次关系的集合。把它叫做“树”是因为它看起来像一棵倒挂的树,也就是说它是根朝上,而叶朝下的。其中树根的节点我们称作根节点(root),然后向下延伸若干边到达子节点(child),以子节点为树根的树称作子树(subtree)。下图展示了三种不同形态的树:.原创 2021-10-16 11:57:32 · 70 阅读 · 0 评论 -
《算法笔记》读书记录DAY_29
CHAPTER_8 提高篇(2)——搜索专题8.2 广度优先搜索(BFS)广度优先搜索也是用来遍历或搜索树和图数据结构的算法,它和深度优先搜索的思想截然不同。广度优先搜索和二叉树的层序遍历较为相似,需要借助于队列实现;深度优先搜索和二叉树的前序遍历较为相似,需要借助于栈实现。BFS以广度为第一关键词,它总是访问当前邻接的所有结点,再按照这些邻接结点被访问的顺序,再依次访问它们能到达的邻接节点,直到所有结点被访问结束。我们来看一个BFS例子,从v1开始遍历下面这个图。首先访问v1,v.原创 2021-10-15 20:22:54 · 85 阅读 · 0 评论 -
《算法笔记》读书记录DAY_28
CHAPTER_8 提高篇(2)——搜索专题8.1 深度优先搜索(DFS)原创 2021-10-14 18:11:56 · 83 阅读 · 0 评论 -
《算法笔记》读书记录DAY_27
CHAPTER_7 提高篇(1)——数据结构(1)7.3.4静态链表在前面几小节,我们介绍了动态列表。原创 2021-10-13 20:40:11 · 62 阅读 · 0 评论 -
《算法笔记》读书记录DAY_26
CHAPTER_7 提高篇(1)——数据结构(1)7.3链表的处理原创 2021-10-12 19:41:52 · 66 阅读 · 0 评论 -
《算法笔记》读书记录DAY_25
CHAPTER_7 提高篇(1)——数据结构(1)7.2栈和队列的应用情形—表达式计算一般来说,我们将表达式分为三种:前缀表达式、中缀表达式、后缀表达式。我们日常中使用最多的是中缀表达式。这里不在赘述这三种表达式的定义,有需要的读者可以参考博客前缀、中缀、后缀表达式(逆波兰表达式) - chensongxian - 博客园。栈的一个非常典型的应用,就是制作简单计算器,在计算器读入我们输入的中缀表达式时,并不会直接进行计算,通常会将它转变为后缀表达式,然后在计算后缀表达式的值。接...原创 2021-10-12 11:34:25 · 57 阅读 · 0 评论 -
《算法笔记》读书记录DAY_24
CHAPTER_7 提高篇(1)——数据结构(1)7.1栈的应用栈是一种先进后出的数据结构。怎么理解先进后出呢,我们将栈理解为一个箱子。我们每次放东西,都是从底下开始放,而拿的时候从最上面开始拿,这样越早放的东西拿的也就越晚,箱子里面的东西也就是先进后出了。栈的结构可以参考上图。我们看到,有一个栈顶指针TOP始终指着最上方的位置。栈顶指针是始 终指向栈的最上方元素的一个标记。假如我们的栈使用数组来实现,TOP就是一个int型的变量,它记录着数组最后一个元素(也就是栈顶元素)的...原创 2021-10-10 16:45:28 · 86 阅读 · 0 评论