同学们大家好,今天我们来讲一下这个 ccf csp 界二零二一年的第五题,这道题呢考的是关于赞赞的一个知识,关于赞的一个知识, 还有就说入战,出战你要学会,然后,呃,这道题的要求是不合法的是什么?那我们一个一个去模拟一下, 嗯,看 a 是不是合法,那这里有有 abcde, 然后呢? a 进去, 然后 a 马上出来,然后 b 进去, b 马上出来,然后 c c 进去, c 马上出来,然后 d 进去, d 马上出来,然后 e 进去, e 马上出来, 就变成了 abc, e 是对的, 然后我们来看这个,这个这个的话,他就是说 a 进去, a 进去, b 进去, 然后塞进去滴进去,然后一进去,然后他就开始出来,然后一出来, 一出来,然后滴出来,然后 c 出来, b 出来,然后 a 出来。 啊,发现也是对的, 这也是对的。那我们来看一下 c, c 的话,就是因为他第一个要 b 出来,然后先是 a 进去, a 进去,然后 b 进去, 然后呢? b 出来,然后 a 出来,然后塞进去, 塞进去,塞出来,然后滴进去,滴出来,然后溢进去,溢出来,发现这个也是对的。 那我们看最后一个,最后一个的话就是因为他 c 先出来,所以呢 a 进去, b 进去, 然后塞进去,然后塞出来,然后滴进去滴出来, 这个时候他要 a 出来,呃,发现是不可能的,因为 a 的上面还有一个 b, 所以呢这个这个 d 呢是错误的。 那这道题我们就分析到这。
粉丝938获赞4484

各位同学大家好,今天我们来看一道关于数据结构中站的问题。这里的站我们可以形象的看作是底部封闭的试管, 先进来的数据元素从顶部进入管道,放到最底部,称之为入站,于是大家可以看到这样的景象, 而反之的出站则是从最顶部的元素开始依次向外取出, 这就是关于出站和入站的规则。好了,接下来我们看看关于这个知识点的试题。 假设以 s 和 x 分别表示入站和出站操作,并且初始和终止时站都为空,那么请问下面哪一个答案不是合法的操作序列?首先我们来看一下第一个答案,由于题目中提到 s 表示入站, x 表示出站,所以我们可以看到这里两个 s 入站,然后三个 x 出站。接下来我们根据 a 答案来进行入站和出站的操作, 第一个元素入债,第二个元素入债,第三个元素出债,出债。 好,到了第五个元素的时候,我们这个时候站里边已经没有可以出站的数据了, 所以这个时候就报错了。那么我们接下来看一下 b 答案, b 答案的特点呢是入三个,出三个,再入两个,再出两个。他的效果是这样的,入站,入站,入站,出站,出站,出站, 然后再入两个赞,然后再出两个赞,正好我们的初始和终止时我们的赞都为空。那接下来的西答案我们看一下, 入站两个,出站一个,再入站两个,再出站一个,再入站一个,然后再出站三个。 此时我们的战正好清空,满足初始和终止时战都为空。 接下来我们再看一下地答案,地答案的特点呢是入一个出一个,入一个出一个,直至最后完成所有的入站和出站操作, 初始和终止时,我们的赞都为空。因此,本题应当选择 a 答案。 a 答案呢,入两个出三个,明显不符合我们的操作序列。如果大家觉得这个视频对你们有帮助,欢迎大家给我点赞, 你们的鼓励就是我前进的最大动力。关注我,您身边一个懂计算机的朋友!

我们一起来讨论战的问题,对于入战顺序为 abcde 的序列,下列哪一个不是合法的出战序列?首先我们先来了解一下什么是战,战是如何进行操作的, 我们看在中间的部分,我们画了一个红色的一个盒子或者是一个系统,那么这个时候呢?我们把 a 先放进来, 当 a 放下来之后,我这个时候 a 可以先直接出来,或者是他从这里不动,我们这个时候 b 再进来, b 同样是只能够从上边进来,当我们 b 进来之后, a 就被 b 压在底下,这个时候 a 就无法出来了,如果想把 a 拿出来, 就只有避险出来,这就是他的一个出战的顺序,这样出来, 然后再 a 出来,这样才是一个合法的一个出单的顺序,那么这个题就是按照这样的一个规则来进行的,那么这里边占有一个规则,就是后进先出, 后边进来的一定要先出来才可以。那么我们来看一看,对于题中的每一个选项该如操作, 他的出的顺序是 abcde, 那么我们看一看,如果我们第一次进来的是 a 的话先进来,那么这个第一个出来的是 a, 我们就可以进来之后马上出来,这样是 a 出来没问题,接着我们再来进来 b, 然后币又马上出来,然后第二个是币也没问题,类似的第三个 c 我也是进来我就出来,然后第也是进来之后直接再出来, 那么这样的话我们就可以达到这样的一个目的,就是 a 选项是可以实现的,他出来的顺序就是 abcde, 那么我们发现我们这个站他进和出的顺序是可以一样的, 就是每一次进一个出一个,进一个出一个。再看选项币 想象, b 是 e、 d、 c, b, a 刚好和进的顺序相反,那么我们想一想,第一个出来是它是 e, 那么我们前边 a 进来,这个时候 e 还没出来,所以不行,那么 b 再进来, 然后类似的 c 再进来,然后 d 再进来,最后一进来,一进来之后呢?然后一开始往外出,这样的话我们先把一出来好,第一个符合再出来,第啊,第二个也符合, 然后再出来,第三个 c 也出来, c, 第三个符合,那么第四个呢?是 b 也符合,最后一个刚好是 a, 那么我们发现出的顺序和进的顺序可以刚好相反, 注意下边是先出来的,那么这是我们出来的顺序,这是第二个选项。再来看第三个选项,第三个选项是 bacde, 那么怎么办? 我们看看第一个想要出来的是 b, 那么我们必须 a 先进来, a 进来之后,那么 b 也跟着进来,他进来之后,这个时候他要出去,他是第一个出来的,所以我们要把 b 先把他出来,然后第二个是 a, 我们就把 a 也给他出来, 接下来是 c 出来, d 出来, e 出来,那么这个是和第一个情况就是一样的了,是 c 进来,出来,进来又出来,再进来又出来, 这样的话就是 abcde, 这几个都可以实现,顺序就是 bacde 的顺序,那么再看最后一个可不可能最后一个说的是 cdcd 先至 c 出来,那么我们要想先塞出来的话,我们肯定是要 a 和 b 先进来,因为进的顺序是固定不变的,都是 abcde 的顺序。好,那么这个时候我们塞进来,然后他才能出来,这是第一个可以出来,没问题, 然后第二个是地看看地进来,出来可不可以地进来,进来之后,然后他马上出来,哎,没问题。 然后第三个他说是 a, 那么看第一出来之后下边是谁啊?最上边的一个是 ba, 在 b 在下边,这个时候 a 就出不来了, 所以我们这个时候就没有办法出来 a 只能够是出来 b 或者出来 e, 所以这个 的选项是无法实现的。那么这里边实际上我们可以总结出来一个规律,就是说 我们某一个位置比较大的话,那么他后边如果有比他小的,那么就一定是 逆序的,就是和进来的顺序是相相反的才可以。比如说我们最后一个,这个 d 是比较大的,他后边是有 a 和 b 比他小,那么我们要出的话,就只能够是 b 先出, a 后出,这样才可以,否则就不能实现。 看一下前面一个,前面这些是不是都是可以?假如说这里面是 d, 那么 d 进来之后,后边是不是有 c, 有 b 有 a 呀?那么是不是 c 先出,然后 b 先出,咱再是 a 先出,这 可以,所以一定是要,后边一定是要啊和金莱的顺序相反才可以,如果和金莱的顺序相同,这种就不可以了。注意前边是有一个大的情况下,之后的部分才是这样子的。

这个呢是初葬,初葬呢就关系到 p o p 这两部 p o p 这个跟我们前面一段代码是一样的啊,是一样的复制过来的。那么初葬呢,按什么银行 初始状态呢?嗯啊,这里有个字打错了,更改一下啊, 好了,我们来看一下,经过更改了,我们把它改过来,这是出胀的一个情况,出胀的一个情况, 他是什么样?先将啊最后压入的数据先出来,从内容当中啊,先取出啊,取出之后呢, 这个内存中的数据呢啊,这个占重的数据他会清零,变空啊,变空啊,我自动的会删除掉,然后再从 这个帐篷再取出啊,这个暂停的数据啊,零零幺 a 啊,先取出 ax 啊,取出送入到 ax, 再取出第二块地址,因为这里呢是取两片啊,从暂停取两片, 第一遍呢送入 ax, 第二遍,第二次呢输入 bx, 第一次是零零幺 b, 因为这个是涨停,从涨停 先取出之后呢啊,这个指针呢就会下移,下移之后呢,再取出 b 啊,取出数据到 bx, 是这个意思啊, 三点九点四, push pop 实力问题,吸入自行数据 编程一,在幺零零零处吸入自行数据二二六六,我们可以用以下的代码完成,看例子,先确定好什么呢?数据段的一个地址, 然后呢再把数与数据写入到数据段,通常呢我们这个代码呢,我们是这么做的, 尤其是第四局,尤其是第四局,这个讲了很多了,应该理解 mo 为奥林逗号 x, 那就是说吧, 二二六六送入到零地址当中,那题签同等于, 这不是等于这样的, 如果通过入账的方式,我们来完成相同的功能,不要用这个 mov 数据传送, 不要用这个 mov 数据传送,我们应该怎么做? 那就是用我们刚才所学到的压入和弹出的一个指令。首先我们要确定 这样的一个地址在什么位置啊?幺零零,那第二第一步,第二步呢就完成内层直径的一个储存的空间。 第三步呢,完成个涨停的位置在什么地方?由于我们压入是几个字节,是十六位二个字节, 那么我们在这里设置 sp 零二 ask, 那这个地址内存的范围呢?他是从零开始的,第一个地址是零,第二个位置呢是一,第三个位置呢就是二的位置,这个呢就是我们内存的 一个涨停的位置,因为我们这里要压入多什么数据呢?要压入的是二二六六 啊,二个自己,所以只需要两个单元的空间啊,只需要这么两个单元的空间就可以了。第一个单元的位置是什么数据呢? 我们分析一下 啊。第一地址送入 低八位,送入低地址,高八位呢,这个是高八位送入高地址,低八位呢送入到低地址,那这个低八位是六六,那么六六 h 送入零号为止, 那一号位置呢?他就是二二 h 送到一号地址,这个呢就是涨顶,指的是一个涨顶的指针, 最近也是,然后呢把这个数据入账之后呢,他就涨了, 那么在这里呢?他压入到哪里啊?压入到指定的内存空间幺零零一米,跟我们的数据段是一样的, 他通过 mov 呢,于是把数据呢传送到一个地址空间当中,我们通过 我们通过 push, 他一是把这个数据呢送入到这个地址空间啊,就是零号地址和一号地址 啊,他是统一样的,因为他指定的物理地址他是幺零零零零的一个位置啊, 只不过呢,他的账的名账的段不一样,一个是 ds 段,一个是 ss 段啊,他的一篇内存空间对不对? 他只限的是同一片空间啊,多是多是什么位置啊?多是玻璃,第一次是幺零零零零位置,这个 我的地址都是这个,也就是说在这片 在这个地址空间下储存这两个数据。这是啊,这几句 代码呢,都是相同,第一跟第二呢,都是相同的。 p u s h 和 p u p 实质上呢就是一种内存传送指令, 可以在继承期和内存之间传送数据。 push 和 pop 指令呢,他同 m o v 指令不同, cp 要执行 m o v 指令呢,只需要一步操作就是传送 啊,执行 push 和 pop 指令呢,却需要两步操作。 好,我们来看一下下面。


前面介绍了顺序站的结构定义、出示化以及入站、出站等各种操作。 由于顺序战和顺序表一样受到最大空间容量的限制,虽然可以在满员时重新分配空间,扩大容量,但是工作量较大,应该尽量避免。 因此在应用程序无法预想古迹战可能达到的最大容量时,还是应该使用下面介绍的恋战。 恋战的表示和实现。恋战是指采用恋式存出结构实现的战,通常恋战用单恋表来表示,恋战的节点结构与 与单连表的结构相同,在此用 stagnant 表示。定义结构如下,大家看到在这个结构当中, 由于是一个恋战,每一个节点有一个数据域,以及一个指向下一个节点的指针域。 next, 由于练战是运算受限的,单练表只能在练表头部进行操作,固在定义的时候没有比要附加头结点,站定指针就是练表的头指针 利入图是如下,在操作的时候可以直接 从站顶开始练站的出师化操作就是构造一个空站,因为没必要设置头接点,所以直接将站顶指针制空即可。 对恋战的出示化函数是比较简单的,也就是通过行餐接收链表,然后站定 赋予空值,就达到了初始化的目的,也就是空战。 那么对一个恋战如何判断是否为空呢?其实在出师化的时候,由于站定 制空本身就是一个创建了空的恋战,所有人在判断一个战是否为空的时候,看一下恋战的站点 他的值是否为空,如果是空,返回真值,否则返回价值。 对于一个链表如何进站?首先我们创建一个进站函数,用行餐接收一个空站, 然后传入一个枝,用行餐衣接受 设置一个拼接点为拼接点创建一个空间,然后判断是否生成空间成功,如果不成功退出, 否则说明脾接点生成空间成功,那么把一接收的值 付给批节点的数据域,批节点的 下一个节点指向链表达占顶 s, 由于 表示的是站定当皮结点,也就是新的结点,指向站定结点的时候, 八站定节点移向心入战的 p 节点,所以说把 p 节点赋予暂定节点 s 区占顶元素的操作相对也是比较简单的。 首先把刚才创建的恋战通过行餐开始接受判断,如果 站微空的时候退出,否则返回站定所指向的数据域, 就达到了恋战战定元素取出的目的。这里需要跟大家重新强调的是, 取站定元素并不是出站,如果出站的时候是站定元素不再存在, 而区占订元素是把这个占订元素的值产生一个副本返回,而原来的占订元素在占中 照样存在。最后一个介绍一下恋战的出战操作,创建一个出战函数 有两个新餐 s 和 e。 前面曾经介绍过 s 和 e 这两个变量分别用到了食餐变量的饮用变量。 引用变量的目的是在函数中对这些数据进行操作以后形成最后的结果,结果可以通过引用变量传出函数,也就是返回 调用函数。那么在出战的时候,首先要判断战是否未空,如果战未空返回错误,否则 占顶节点的数据赋予一把占顶节点 赋予一个新的变量 p, 目的是在出战以后,刚才说过 占顶不存在,所以说出站以后需要把占顶元素这个空间 销毁,然后由于 ice 指向占顶的节点已经出站,并且把这个节点赋予了新的节点变量 p, 把 s 的下一个节点再指向头节点 s, 然后用 delete 命令把皮节点销毁返回结束。当然这里皮节点 是一个保存出战的头结点,为了小销毁应用,所以这个 筹接点必须也要提前定义才能够使用。也就是 进入函数题以后,首先生成一个新节点 p, 然后 p 才能够存触站定节点,然后把它消。