15、数据结构——栈与队列——表达式求值

前言

​ 这部分考到的概率还是非常大的,但是使用纯文本的形式对本人来说还是很难把这个问题讲述好,建议大家去看看B站王道考研课程的视频讲解部分链接

一、三种表达式

三个部分组成: 操作数、运算符、界限符

后缀表达式(逆波兰表达式)

前缀表达式(逆波兰表达式)

中缀表达式转后缀表达式

动画

image-20240218134743368image-20240218135707850image-20240218140014628

使用栈实现计算流程:

链接

20min40s~23min左右

中缀表达式转前缀表达式(略)

image-20240218140805964

image-20240218140840657

使用栈实现计算流程:

28min24s~29min36s

二、中缀表达式转后缀表达式

初始化一个栈,用于保存暂时还不能确定运算顺序的运算符。

从左到右处理各个元素,直到末尾。可能遇到三种情况:

​ ①遇到操作数。直接加入后缀表达式。

​ ②遇到界限符。遇到“(”直接入栈;遇到“)”则依次弹出栈内运算符并加入后缀表达式,直到弹出“(”为止。注意:“(”不加入后缀表达式。

​ ③遇到运算符。依次弹出栈中优先级高于或等于当前运算符的所有运算符,并加入后缀表达式,若碰到“(”或栈空则停止。之后再把当前运算符入栈。

按上述方法处理完所有字符后,将栈中剩余运算符依次弹出,并加入后缀表达式。

下面的自己试试:

image-20240221161336565

下一节内容是:16、栈与队列——递归!!!,下一小节摸个 <・)))><<

一定要把本节内容看懂再往下看,不然会非常痛苦的哦o(╥﹏╥)oo(╥﹏╥)oo(╥﹏╥)o……..