数据结构–栈的引用–前中后缀表达式(后部分)
中缀表达式转后缀表达式(手算)
中缀转后缀 \color{purple}中缀转后缀 中缀转后缀的 手算方法 \color{purple}手算方法 手算方法:
①确定中缀表达式中 各个运算符的运算顺序 \color{red}各个运算符的运算顺序 各个运算符的运算顺序
②选择下一个运算符,按照 「左操作数右操作数运算符」 \color{red}「左操作数右操作数运算符」 「左操作数右操作数运算符」的方式组合成一个新的操作数③如果还有运算符没被处理,就继续②
“左优先”原则 \color{red}“左优先”原则 “左优先”原则:只要左边的运算符能先计算,就优先算左边的
中缀表达式转后缀表达式(机算)
初始化一个栈,用于保存 暂时还不能确定运算顺序的运算符 \color{red}暂时还不能确定运算顺序的运算符 暂时还不能确定运算顺序的运算符。从左到右处理各个元素,直到末尾。可能遇到三种情况:
①遇到 操作数 \color{red}操作数 操作数。直接加入后缀表达式。
②遇到 界限符 \color{red}界限符 界限符。遇到“(”直接入栈;遇到“)”则依次弹出栈内运算符并加入后缀表达式,直到弹出“(”为止。注意:“(”不加入后缀表达式。
③遇到 运算符 \color{red}运算符 运算符。依次弹出栈中 优先级 \color{purple}优先级 优先级高于或等于当前运算符的所有运算符,并加入后缀表达式,若碰到“(”或栈空则停止。之后再把当前运算符入栈。
∗ / 优先级高于 + − \color{pink}*/优先级高于+- ∗/优先级高于+−
按上述方法处理完所有字符后,将栈中剩余运算符依次弹出,并加入后缀表达式。
中缀表达式的计算(用栈实现)
用栈实现 \color{purple}用栈实现 用栈实现中缀表达式的计算:
初始化两个栈, 操作数栈 \color{red}操作数栈 操作数栈和 运算符栈 \color{red}运算符栈 运算符栈
若扫描到操作数,压入操作数栈
若扫描到运算符或界限符,则按照“中缀转后缀”相同的逻辑压入运算符栈(期间也会弹出运算符,每当弹出一个运算符时,就需要再 弹出两个操作数栈的栈顶元素并执行相应运算,运算结果再压回操作数栈 \color{red}弹出两个操作数栈的栈顶元素并执行相应运算,运算结果再压回操作数栈 弹出两个操作数栈的栈顶元素并执行相应运算,运算结果再压回操作数栈)
后缀表达式的计算(机算)
用栈实现 \color{purple}用栈实现 用栈实现后缀表达式的计算:
①从左往右扫描下一个元素,直到处理完所有元素②若扫描到操作数则压入栈,并回到①;否则执行③
③若扫描到运算符,则弹出两个栈顶元素,执行相应运算,运算结果压回栈顶,回到①
注意:
先出栈的是“右操作数”
栈用于存放当前暂时还不能确定运算次序的操作数
中缀表达式转后缀表达式(机算)
初始化一个栈,用于保存 暂时还不能确定运算顺序的运算符 \color{red}暂时还不能确定运算顺序的运算符 暂时还不能确定运算顺序的运算符。从左到右处理各个元素,直到末尾。可能遇到三种情况:
①遇到 操作数 \color{red}操作数 操作数。直接加入后缀表达式。
②遇到KaTeX parse error: Invalid color: '界' at position 7: \color界̲限符。遇到“(”直接入栈;遇到“)”则依次弹出栈内运算符并加入后缀表达式,直到弹出“(”为止。注意:“(”不加入后缀表达式。
③遇到 运算符 \color{red}运算符 运算符。依次弹出栈中优先级高于或等于当前运算符的所有运算符,并加入后缀表达式,若碰到“(”或栈空则停止。之后再把当前运算符入栈。
按上述方法处理完所有字符后,将栈中剩余运算符依次弹出,并加入后缀表达式。
中缀表达式的计算(用栈实现)
栈实现 \color{purple}栈实现 栈实现中缀表达式的计算:
初始化两个栈, 操作数栈 \color{red}操作数栈 操作数栈和 运算符栈 \color{red}运算符栈 运算符栈若扫描到操作数,压入操作数栈
若扫描到运算符或界限符,则按照“中缀转后缀”相同的逻辑压入运算符栈(期间也会 弹出运算符,每当弹出一个运算符时,就需要再弹出两个操作数栈的栈顶元素并执行相应运算,运算结果再压回操作数栈 \color{red}弹出运算符,每当弹出一个运算符时,就需要再弹出两个操作数栈的栈顶元素并执行相应运算,运算结果再压回操作数栈 弹出运算符,每当弹出一个运算符时,就需要再弹出两个操作数栈的栈顶元素并执行相应运算,运算结果再压回操作数栈)
中缀表达式的计算(用栈实现)
用栈实现 \color{purple}用栈实现 用栈实现中缀表达式的计算:
初始化两个栈, 操作数栈 \color{red}操作数栈 操作数栈和 运算符栈 \color{red}运算符栈 运算符栈若扫描到操作数,压入操作数栈
若扫描到运算符或界限符,则按照“中缀转后缀”相同的逻辑压入运算符栈(期间也会 弹出运算符,每当弹出一个运算符时,就需要再弹出两个操作数栈的栈顶元素并执行相应运算,运算结果再压回操作数栈 \color{red}弹出运算符,每当弹出一个运算符时,就需要再弹出两个操作数栈的栈顶元素并执行相应运算,运算结果再压回操作数栈 弹出运算符,每当弹出一个运算符时,就需要再弹出两个操作数栈的栈顶元素并执行相应运算,运算结果再压回操作数栈)