00:00
好,我们来看一下这个代码啊好,看一下代码,打开Vs code,然后这块代码我先把它拿掉。先拿掉。然后呢,我们新建一个文件夹,新建一个文件夹还是第20章叫stack。好,然后呢,我们写一个主文件main.go。好,Package包,然后呢,Import。Form,然后写一个主函数。呃,我们这块呢,是用一个数组来模拟这个站,当然其实站呢也可以用。也可以用链表,就是链表其实最灵活的啊,链表既可以去模拟一个队列,它也可以模拟一个站,但是现在我用数组,我先说一下啊,使用数组,使用数组来模拟,模拟一个站的使用,站的这个使用。OK,那既然我要用到这个数组,那我肯定要定一个结构体对吧,因为占里面有几个概念嘛,一个是数组本身,第二个呢,有占底,有个有个占顶,还有一个占底对吧,这这个地方大家要要很清楚知道啊,那么现在我开始来定义一个占了啊,Step tap tap我们就叫step。
01:19
好,然后呢,是一个用结构体来做。首先我先做这么一个东西,就是我认为它最大的这它那个top最大,就是它的占比,最大值是max。Tom。是个int,我先说一下这是什么东西啊,这个表示表示我们的这个占占顶的最大值。站顶。啊,我这样这样说吧,就是我们这个站最大能存多少多少数据吧,表示我们这个站。最大。最大的这个数据是多大?最大的数啊,最大的数个数啊,最大我们占的最大,最大可以存放,存放的这个数。
02:09
个数。好,这是第一个啊,后面我们都要用它,用用它完成很多事情,第二个呢,我们做一个占比top。Top top呢,这个直接就说表示我们的占领。哎,表示。表示这个占领。占比,那么既然表示占领,占比这个呢,因为它没有变化,所以说不用写,如果我们top等于负一了,它自然就是一个空站,所以说没有必要专门去写一个占比这个变量,因为占比本身它是不变的,写不写无所谓啊,所以说占比,占比呢可以不去设置啊,呃,因为我说一句啊,注意听这句话,因为占底。它的占底呢,它是不变的啊,它是固定的,固定的因此可以不给,因此我们直接直接使用占比来表top就可以了,还有一个呢,就是数组,就是我们这个数组有多大,现在呢,我定一个五个元素的数组啊,注意听,那现在呢,我们写一个它的。
03:13
因为我是用数组来模拟的吗?所以说我定义一个这样的数组。好,这个数组模拟模拟战。好,这个站就定好了。这个站就定好了,好,那站写好了,过后呢,我们先来完成它的,呃,一个入站,再做一个便利站来开始写了。那这样开始做啊,同学们,那现在呢,我来写一个function给他绑定一下。This新stock,那么我们先写一个入站push,入站呢,一般这个术语我们就叫push,就推进去啊推进去,那推进去的时候你推个什么呢?给我推一个子进来。
04:00
Int,因为我这呢,呃,这个数组呢,是用int类型的,所以说我入战的时候,这个数呢,也是一个int啊,当然你如果是float,呃,这样也是float,以此类推,那入站的时候呢,我们看看这边会有一个什么呢,有可能会产生一个错误,所以说我返回一个L。那我什么时候会有个L呢,比如说站已经满了,对吧,所以说这个地方呢,咱们要做一个这样的设置。好,这个呢,就是我们所说的一个LL,好呃,那现在我们看怎么来入战呢。入站,我开始这样写啊,同学们,我这样做。先判断这个站是不是已经满了。先判断,先判断站是否已经满了。是否满了?那你怎么知道这个站已经满了呢?那要取决于这个top和max top之间的关系。
05:01
那有的老师,那mato到底是什么?Mato表示占最大可以存放的个数,那我这样子啊,我先先初始化一个站,大家就知道它们之间的关系,我先写一个站。我写一个大家看一下啊。好。我我先这样子,先去初始化一个站,第一个max。Top。等于几呢?等于五,因为你本身这个速度是五对吧,所以说我给他一个五。这个呢就表示注意听表示最最大的数,最大最多。最多。最多存放存放五个数,存放五个数到到占中。因为我这个单是有限的,这是第一个定下来,第二个top初始化的时候,这个top各位同学刚才老师已经分析好了。初始化的时候,这个站呢,相对于说没有数据,没有数据的话呢,我们默认为负一啊,给他写个负一,这个是初始化的时候就是负一表示现在占为空,注意听这句话啊,负一也也也也就说这样意思吧,当占顶当占为负一时。
06:13
表示占为空对吧,表示占为空。正确,那么这个就不用管了,它本身就是多大就是多大,好这个大家看到啊,五负一速度有五个,就这个五呢,要跟你这个里面这个五表示一个匹配关系啊,匹配关系好,现在我们判断怎么样判断满了呢,如果。什么关系,如果就是你这个this里边的这个top。它等于了。它等于了我们这个什么呢?嗯,这个max就是this.max top减去一个一。啊,为什么呢?因为你一想嘛,你top不停的往上涨涨涨。
07:00
当他存存款的时候,这个top呢,应该等于四。应该等于四四,如果等于你这个五减一等于四,说明这个已经占就满了,不能再往里面加了,好所以呢,就弹出一句话。给他输出一句话叫什么呢?叫做占满。Stuck for,那么占满过后呢,咱们就给它返回一个错误就行了,Return return,一个error。AS6。六一个啊,比如说我们就叫stuck fair fair就可以了。好,当然这个时候呢,我应该引入一个包包。好,这个是,那么如果说你这地方没有满,没有满的话呢,我们就往里面加就行了啊,打起精神又要睡觉了啊好,呃,那我们看看这一帮应该怎么加进去呢,非常的简单。先让这个top加加,再往里面放数据,注意听啊,先让top增一再加。啊,应该是这个逻辑啊,This top加加。
08:02
加加让他增一啊,增加一个后,过后呢,放入数据。放入数据,呃,放入这个数据,放入数据,那么。这个数据怎么放进去呢?非常简单,就是this,点里面的this.top等于你的这个值。好,这个就成功了,成功过后呢,呃,直接return就可以了,因为这个error本身它是有个命名参数,所以说return就就成功了啊,这个就代表入站成功,好大家看入账就非常简单,写完了,那现在呢,我们再来写一个什么呢?显示我的便利这个站。便利站。便利站,那便利站的时候,咱们咱们要注意啊,是从站顶开始打。因为你取的时候,你是从暂停取嘛,所以说你在打的时候呢,你不能按照以前从零开始打,那是不对的啊,所以说便利站的时候呢,要注意注意需要从占顶,占顶开始便利对不对,开始比那也很简单不。
09:10
This she stuck。大,然后呢,我们就叫list的,或者叫受都可以啊,比如说我就叫呃显示吧,List list,然后便利的时候呢,这个没有什么输出对吧,没有什么输出,我就直接做这个工作,那首先第一个事情啊,你既然便利这个站。那你先判断这个站是不是空的,如果这个站是空的,那肯定没有办法便利,你就给他提示一句话就行了,好,先判断。先判断这个站是否为空。是否为空?啊,当然,呃,你你也可以啊,呃为空,你也可以把这个判断空还是满,呃这个卡它封装成一个函数也可以啊,也可以把这个封装的一个函数里面也可以啊,比如说NPD或者负,你们可以把它封装起来,因为这比较简单,我就没有封装了啊啊那怎么写呢?如果。
10:06
一句话的事儿,如果我们这个z.top它等于负一,那说明就说初始化的时候,它就一直没有往里面加东西,或者说不停的弹出来,弹弹弹的没有东西了,如果它等于负一,说明它是空的,因此呢,你这样打出一句话就行了,打出一句话就说占空。要直接写一个star for MP,好,Return不走了。不走了。啊,没没办法没没办法便利,那如果说他不为空怎么办呢?好不为空,注意啊,不为空的时候呢,咱们就开始从占顶开始打。但是你你不能够去直接修改这个占的值号,你不要把这个占领给改了,改了话你自己都不知道他原先有多大了,因此呢,我们一般来讲就做一个,呃,用一个帮忙的,就是跟我们做这个便利便利这个链表一样,用用一个用一个辅助参数来搞定它,比如说我用一个current。
11:14
Current top,好吧,啊,这是我的一个习惯,Current top,我把这个this.top给他,因为将来这个top会会变化啊,会变化它不停的往下减,减减嘛,减到零啊,这样子做会比较好,好给他了,过后我就开始负循环了,那么首先我们先把这个I。等于。啊等于啊从这,诶这个好像是暂时用不到这个啊,可以不需要这个跑跑路的用它来做就行了,认识点top。用I进行这个便利也可以啊,相当于I就变成我们一个帮忙的了,那么先把this top付给I啊,这个暂停给了这个I,然后呢,I只要它大于等于,就是它只要大于等于零,我们就可以不停的去显示,对吧?好,然后呢,这个地方I要不停的减减,对,那这样子的话,这个current top就不需要了。
12:10
不需要了,因为我没有去改变this top,好,那现在呢,我们就把它输出来。好,我们这样打print输出来啊,同学们看,那就是瑞。百分之D等于输出这个值,那么每打一个呢?哎,这样子我们换一行。这样看起来比较比较清晰一点,显然D是多少呢?D就是I。D就是I,就代表你是第第几个元素,就是从上往下往下打,然后呢,这个值显然就应该是什么呢?就是我们这个Z里边的A。注意听this里面A里面的下标就是这个I,大家看清楚了啊,This是我们这个站里面这个数组的I。啊啊,大家看这个数组里面放的是真正的东西啊,那么它一一减减,再一减A,最后它越减越小,只要它大于等于零,咱们就可以打,如果它不大于零的话,那说明它已经编定完了啊,编定完了注意啊,这个this top没有没有发生改变。
13:16
好,我把这个输出来,大家看一下。好,这个呢,我们就站的情况,站的情况如下,好,同学们,我们来测一下。看看有没有问题啊,这次负一咱们不玩了,如果不等于负一,把这个交给ii,只要大于等于零,我们就去答I,不停的往下走,减减减减减减,好可以。好,我们来玩一把入战。来,我们要入上啊。入站,那入站呢,我们就这样写了大点push。一。我多加几个,同学们看。第一个啊,第一个第二个。第三个第四个第五个,好,我输出一下,应该我一共有五个吧,啊,我在显示。
14:05
显示的话呢,用这个sta点。我们的这个list。类似。注意听好,待会我们要用这个站完成这个计算式的一个运算,所以说前面这个很还是很重要的,不能写错了,写错会跑不起来,我们来看看输出什么。大家看啊,根据我这个入战是先入的12345打一的时候呢,刚好是反过来打的是54321啊五四三二一来玩一把。CD点,点CD到sta。然后呢,我们go run main.go跑。看代码。OK,好,跟我们想象的是一样的啊,同学们这样的情况如下,是就占顶是第五个第五,以此类推,那么我们问大家一个小问题啊,如果说我在这地方再去加一个六。
15:00
各位,这个地方,也就是说第54行他往里面走的时候,这时。这个地方它就会阻止,因为你this top不停的在加加嘛,你再加加加加加,诶加到已经加到五了,所以这个时候它已它已经到四了,它已经等于它了,你就加不进去了。所以说当你再加第六个元素的时候,它就会直接告诉你出错了,看是不是这样子的啊。走,我们看效果。好,同学们,可以看到我们的第六没有加进去,没有加成功,它在这加了一个战满。原因刚才老师已经分析了,就是你在加这个元素的时候,其实进到这里面的时候,你这个这个条件就成立了,就是this.top1,因为this.top已经等于四了,四等于五减去一,五减一等于四嘛,就满了,就直接出去了。好,这个是我们讲的站的一个入站和一个便利,这个就叫入站。
16:05
这个就叫入战。好,那么关于这个入站和便利呢,我们先给大家讲到这里。
我来说两句