00:00
同学们,下面呢,我们就来完成中缀表达式转后缀表达式的代码实现,那打开我们的这个eclipse,我们就在原先的这个包的。呃,Notation这个代码里面写好吧。那首先呢,我说说一下自己的思路好不好,我先说一下自己的思路。现在呢,我们要完成哈,要完成将一个中缀表达式表达式转转成后缀,后缀表达式的这个代码,嗯,功能啊功能。那我们我们现在说做做几点说明,做几点说明,相当于是这样这样一个意思,比如说我这里有一个注意看啊,比如说我这里呢,有这么一个。嗯,这么一个中缀表达式,假如说。这有个这有这么一个中队表示,我最终希望它转成什么样子,先把这个目标定下来,最终它转成的这个表达式呢,是这个样子的。
01:10
能理解我的意思吧?变成这个样子的好,那现在呢,我们第二步我们要这样做。嗯。因为我们刚才在分析的时候,大家还有没有记记住我们是不是有一个索引,就是有一个索引在不停的扫描我们这一个,不停的在扫描我们我们这一个字符串呢,因为你最终先拿到了这个中缀表达式,其实它是一个字串嘛,是是这个意思吧,所以说他在不停的扫描,那这个扫描扫描这个工作呢,其实大家知道直接对一个支付串扫描比较麻烦。所以说我要做的第一件事情是这样子的事情,先干什么呢?先将注意啊,因为我我先说一下原因,因为咱们直接去扫描,对直接。直接对一个字符串进行操作呢,啊不方便,不太不太方便啊不方便吧,不方便,因此我们先做这样一个工作,先干什么呢?先将先将这个字符串。
02:18
先将这个字符串。先将这个字符串转成一个什么呢?转成一个中缀的宗罪的一个list,就是以宗罪的形式,宗罪的形式宗罪。表达式。表表达式对应的一个list。也就是说我要把这里面的内容一个个取出来,放到一个list里面去,而且是保存,保存是中罪的形式,下面我对list来进行进行遍历,是不是就相对比较轻松一点了,能理解我的意思吧,也就说即这样一个含义,我把这个再写的更清楚一点,即把这个串呢,最终我转成了这样一个东西。
03:03
转成了一个r r list,这个list里面放放的是什么呢?放的就是这几个东西。大家再再说的再直接一点啊,小括号也有。就就说我们把这些东西呢,全部都扫进去,大家理解我在说什么吧。这样子大家应该听的比较清楚了啊,就相当于把这些元素这样子。这样子好看。这个好写啊,相当于这里面有这些元素。诶,这样子大家一看就明白了。啊,当然这个应该是乘法了啊,乘法,然后然后是这个。这个。这个因为我不把我我不把我自己要想干什么给你们说清楚,你可能不知道老师在干啥事,明白我的意思吧,好,现在呢,我们。我们先做一个这个表达式,先把写出来,比如说现在我有一个表达啊,同学们我写一个字符串。我先写一个字符串,对,这个字符串呢,我们就叫expression。
04:03
Expression里面呢,它对应的字符串呢,就这个东西。就这个东西。好,最终呢,我们先要拿到这个东西,我为什么要拿到这个东西呢?因为对它进行编利,比直接对一个字符串编辑要后面要方便灵活,好,现在我先写一个方法。同学们,跟上我的思路啊,我先编写一个方法。啊方法,这个方法是干什么呢?将中缀就这个意思,将中缀表达式这样写啊,将中缀表达式转成对应的list。OK,那现在这个方法呢,我们就开始来写了,Public,跟着我的思路public static。它返回一个什么呢?返回一个list里面放的是四寸。放的是,然后里边呢,我们就做two什么呢,In fix。因为你还是宗罪嘛。infe中罪的意思,宗罪expression。
05:04
Expression对应的一个list,大家看,嗯,意思能理解啊,我接收一个字串。我接收一个淄川。好,现在呢,我们先定义,先定义一个list,存放什么呢?存放这个中罪表达式对应的,存放中罪表达式对应的对应的数据对应的这个啊这个这个这个内容吧,好,那现在呢,我们就开始定义它了,List找实训。然后呢,这边我们就叫LS没问题吧,然后呢,六一个r list里面我们放的是菌包起来。好,这个是用来存放中对表对应list的,那下面呢,我们因为你在扫描的时候,实际上有一个索引,因为我要把它变过去,还是需要一个索引,对不对?好,那现在我们写一个int I。
06:00
这个I默认为零。这个是用来干什么呢?这个是,呃,一个指针啊,相当于是一个指针。相当于是个指针,用于干什么呢?用于用于用于便利。用于啊用用于便利什么呢?便利我们这个是S。是便利我们这个字符串中缀,中缀表达式字符串。好,那紧接着我们再定义一个什么呢?String s。这个是用来干什么呢?这个后面有用啊,这个是用来做拼接的,它将来可以用来做拼接做。做什么呢?做对对多位数多位数的一个拼接工作,是不是前面我们也讲过这个类似的这种操作啊,好,然后呢,这个叉再定一个叉C,这个char是干什么呢?就是每每遍历到,每遍历到一个字符就放入到,放入到哪里呢C中,好现在我开始Y循环了啊,直接用do吧,简单一点do。
07:13
OK,这个while写上,那么while循环,呃,便利,这个就开始便利循环便利,那什么时候我们表示一个结束呢?只要I它小啊,只要是I小于我们这个认识。这个认识我们就不停的去便利,呃,每里面的每一个串,因为你呃,你你你这个这个字符串,诶,我们找的是哪一个啊,找的是这个。是不是你传进来的这个串呢,就他。就是S,其实相当于就是它。能理解啊。明白,好,现在我们这是便利,那现在开始写,如果就说我们如果发现它是一个啊,这样写吧,如果C是一个非数字,那如果是它,它是一个非数字的话,同学们。
08:09
那那你想一想。如果他,我们想一想应该怎么处理啊,如果它是一个非数字,我们就什么呢,就。就需要需要加入到哪里去呢?我们需要加入到这个LS里面去,是这个意思吧,如果它是一个非数字,我们就直接加到我们这个LS里面去,那怎么知道它是一个非数字呢?就是if,我们来写一写,如果我们这一个C。大家看我写写一段代码啊,比如说c.C等于先把取出来,C等于什么呢?S点叉X。I。这个是不是取出来这个C了,取出来过后,如果它小于48。小于48,我们把它包起来。
09:00
如果它是小于48。小于48或者或者什么呢?我们取出来这个C。看代码啊,它是大于大于57。同学们问大家一个问题,当这个条件满足,我们看一下,等于啊,这地方是付给他,付给他过后我们看看小括号应该是在这。因为这边我们取出来以后呢,先要做一个比较,所以说我先这样写。对吧,这个稍微的把这个代码重新整理一下啊整理一下。好,这样这样就对了,就说如果我取出来这个C,它呢是小于48的,或者大于57的,说明它是一个非数字,就是它不是一个数。它不是一个数字,非数字就是不是一个数嘛,它如果不是一个数,那么你想一想,它可能就是加号啊,或者这种小括号啊,或者乘号啊,这样东西是不是那如此,如果是这样子的话呢,我们就直接将其加入到这个历史的里面去,能跟上我的思路吧,把它转成一个字串。
10:07
然后呢,哀加加,为什么要哀加加?因为哀要后移,哀需要后移。能理解我的意思吧,好,那如果它是一个数字,就需要干什么呢?就要需要拼接。哦,我我我说这个48和七十五十七是怎么来的,我就不讲了啊,是跟阿斯玛阿斯克玛有关,你们自己去看一下,就是他的阿这个阿斯克玛是在48和小于48和大于57,它就不是一个数,数数是什么范围呢?大大于等于48,小于等于57,自去看一下,如果是一个数。是一个数,需要考虑考虑多问题,多位数的问题。多位数的问题,因为你你比如说你扫描这个一,你还不能马上把它放到这个list里面去,因为它可能后面还有个二。所以说这面要考虑多位数啊,那么写一写,首先呢,我先让这个十菌清空,因为上面有个十俊,我先给它制一个空,因为每次都要制空嘛,自空先将使俊。
11:12
制成。付付付成什么呢啊付呃,先将这个你制空,制成空串。啊,制成。哎,这个字啊。这个字制成什么呢?空串好,那现在我们就是Y循环了。那么外循环怎么写,这个条件怎么写呢?大家想想,就是说只要这个I,它还小于我们这一个字符串的长度。并且。并且什么情况下我们需要需要拼接同学们是不是,并且我们取出来的这一个。取出来的S点叉X。对不对,我们取出来这个I,就是取出来这个I,它是大于等于48。
12:06
大于等于48,并且什么呢?哦,并且我们这个C还要再写一遍哦。啊,小于等于57。是不是小于等于57。对,就说我们每取一个出来,我们发现呢,它在这个范围内,我们应该怎么做呢?就将这个string加等C。其实这个就是拼接。拼接就是说原先我是个空的嘛,原先我是个空的,那么如果这个I还没有越界,还在这个字符串以内,并且这个取出来这个C呢,它是大于等于48,小于等于等于这个57的时候,我们就拼起来,那么你在下拼起来过后,这个是I是不是再加加一点。因为你挨加加完了过后,是不是我又去判断有没有越界,如果没有越界,我再看看下一个是不是还是一个48~57的一个一个范围,因为小大于等于48,小于等于57,说明这个C啊,它就是。
13:12
零它就是这样一个东西嘛,就是零到一嘛,就是零这个这个字符到。九这个字符它对应的阿斯克玛一,这个对应的是48,这个对应的是57嘛。能理解哈,就在这个范围以内。因此呢,我这就不停的拼接,拼接就会形成一个多位数,如果你下一个不是,那就直接退出去了。理解我的意思吧,就是不停的拼接好,拼接完毕以后呢,我们再将这个加进去就可以了,艾,把谁加进去啊,把这个string加进去就可以了。同学们,这个整完了以后,我们这个do外循环做完了以后,其实就已经把它全部扫描完毕了,扫描完毕我们直接将这个LS返回就可以了。返回就可以,大家看代码是不是还是很简洁的,那么我们来测一下吧,同学们,我们来测一下,那为了不跟原先的代码冲突呢,我先把原来的代码进行一个简单的。
14:11
呃,这这进行注销一下。来,我们看看现在能不能得到一个中缀表达式对应的list啊,那现在呢,我们调用刚才这个方法to这个将字符串这个中度表达式放进去,放进去过后呢,我们得到一个变量。宗罪表达是历史的。就他。我们现在呢,把它打出来看看是不是跟我们想的一样啊,In fix expression。那如果说没有什么问题的话,它应该就对应。这样一个字。没问题吧,我们运行之,我们发现代码呢,运行起来跟我想的一样的。是不是一样的好,这个呢,我们第一步工作就做完了,也就是说到此为止,我们已然将一个中缀表达式转成了对应的一个list的,那下一步呢,诶,我们就好办了,下一步我们就按照刚才分析的这个流程,把这个。
15:08
把这个工作就是一到八步这个工作做一遍,然后呢,把它返回成一个后缀表达式对应的list,再说一遍啊,待会我们要做的工作是根据前面分析的步骤,将这个我们得到的得到的这个这个。List转成我们后缀表达式对应的一个list,这样代码就结束了。好,那关于下一步工作呢,我们放到下一个视频为大家讲解。
我来说两句