2栈在表达式求值中的应用_第1页
2栈在表达式求值中的应用_第2页
2栈在表达式求值中的应用_第3页
2栈在表达式求值中的应用_第4页
2栈在表达式求值中的应用_第5页
已阅读5页,还剩50页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

本节内容栈的应用——表达式求值研/CSKAOYAN知识总览研/CSKAOYAN知识总览研/CSKAOYAN中缀表达式转后缀表达式(手算)中缀转后缀的手算方法:①确定中缀表达式中各个运算符的运算顺序②选择下一个运算符,按照「左操作数右操作数运算符」的方式组合成一个新的操作数③如果还有运算符没被处理,就继续②“左优先”原则:只要左边的运算符能先计算,就优先算左边的A+B-C*D/E+F①④②③⑤AB+CD*E/-F+①②③④⑤研/CSKAOYAN中缀表达式转后缀表达式(机算)初始化一个栈,用于保存暂时还不能确定运算顺序的运算符。从左到右处理各个元素,直到末尾。可能遇到三种情况:①遇到操作数。直接加入后缀表达式。②遇到界限符。遇到“(”直接入栈;遇到“)”则依次弹出栈内运算符并加入后缀表达式,直到弹出“(”为止。注意:“(”不加入后缀表达式。③遇到运算符。依次弹出栈中优先级高于或等于当前运算符的所有运算符,并加入后缀表达式,若碰到“(”或栈空则停止。之后再把当前运算符入栈。*/

优先级高于

+-按上述方法处理完所有字符后,将栈中剩余运算符依次弹出,并加入后缀表达式。A+B-C*D/E+FA①④②③⑤AB+CD*E/-F+①②③④⑤研/CSKAOYAN中缀表达式转后缀表达式(机算)初始化一个栈,用于保存暂时还不能确定运算顺序的运算符。从左到右处理各个元素,直到末尾。可能遇到三种情况:①遇到操作数。直接加入后缀表达式。②遇到界限符。遇到“(”直接入栈;遇到“)”则依次弹出栈内运算符并加入后缀表达式,直到弹出“(”为止。注意:“(”不加入后缀表达式。③遇到运算符。依次弹出栈中优先级高于或等于当前运算符的所有运算符,并加入后缀表达式,若碰到“(”或栈空则停止。之后再把当前运算符入栈。按上述方法处理完所有字符后,将栈中剩余运算符依次弹出,并加入后缀表达式。A+B-C*D/E+FA①④②③⑤AB+CD*E/-F+①②③④⑤+研/CSKAOYAN中缀表达式转后缀表达式(机算)初始化一个栈,用于保存暂时还不能确定运算顺序的运算符。从左到右处理各个元素,直到末尾。可能遇到三种情况:①遇到操作数。直接加入后缀表达式。②遇到界限符。遇到“(”直接入栈;遇到“)”则依次弹出栈内运算符并加入后缀表达式,直到弹出“(”为止。注意:“(”不加入后缀表达式。③遇到运算符。依次弹出栈中优先级高于或等于当前运算符的所有运算符,并加入后缀表达式,若碰到“(”或栈空则停止。之后再把当前运算符入栈。按上述方法处理完所有字符后,将栈中剩余运算符依次弹出,并加入后缀表达式。A+B-C*D/E+FAB①④②③⑤AB+CD*E/-F+①②③④⑤+研/CSKAOYAN中缀表达式转后缀表达式(机算)初始化一个栈,用于保存暂时还不能确定运算顺序的运算符。从左到右处理各个元素,直到末尾。可能遇到三种情况:①遇到操作数。直接加入后缀表达式。②遇到界限符。遇到“(”直接入栈;遇到“)”则依次弹出栈内运算符并加入后缀表达式,直到弹出“(”为止。注意:“(”不加入后缀表达式。③遇到运算符。依次弹出栈中优先级高于或等于当前运算符的所有运算符,并加入后缀表达式,若碰到“(”或栈空则停止。之后再把当前运算符入栈。按上述方法处理完所有字符后,将栈中剩余运算符依次弹出,并加入后缀表达式。A+B-C*D/E+FAB对比:“左优先”原则①④②③⑤AB+CD*E/-F+①②③④⑤+-研/CSKAOYAN中缀表达式转后缀表达式(机算)初始化一个栈,用于保存暂时还不能确定运算顺序的运算符。从左到右处理各个元素,直到末尾。可能遇到三种情况:①遇到操作数。直接加入后缀表达式。②遇到界限符。遇到“(”直接入栈;遇到“)”则依次弹出栈内运算符并加入后缀表达式,直到弹出“(”为止。注意:“(”不加入后缀表达式。③遇到运算符。依次弹出栈中优先级高于或等于当前运算符的所有运算符,并加入后缀表达式,若碰到“(”或栈空则停止。之后再把当前运算符入栈。按上述方法处理完所有字符后,将栈中剩余运算符依次弹出,并加入后缀表达式。A+B-C*D/E+FAB+C①④②③⑤AB+CD*E/-F+①②③④⑤-研/CSKAOYAN中缀表达式转后缀表达式(机算)初始化一个栈,用于保存暂时还不能确定运算顺序的运算符。从左到右处理各个元素,直到末尾。可能遇到三种情况:①遇到操作数。直接加入后缀表达式。②遇到界限符。遇到“(”直接入栈;遇到“)”则依次弹出栈内运算符并加入后缀表达式,直到弹出“(”为止。注意:“(”不加入后缀表达式。③遇到运算符。依次弹出栈中优先级高于或等于当前运算符的所有运算符,并加入后缀表达式,若碰到“(”或栈空则停止。之后再把当前运算符入栈。按上述方法处理完所有字符后,将栈中剩余运算符依次弹出,并加入后缀表达式。A+B-C*D/E+FAB+C①④②③⑤AB+CD*E/-F+①②③④⑤*-研/CSKAOYAN中缀表达式转后缀表达式(机算)初始化一个栈,用于保存暂时还不能确定运算顺序的运算符。从左到右处理各个元素,直到末尾。可能遇到三种情况:①遇到操作数。直接加入后缀表达式。②遇到界限符。遇到“(”直接入栈;遇到“)”则依次弹出栈内运算符并加入后缀表达式,直到弹出“(”为止。注意:“(”不加入后缀表达式。③遇到运算符。依次弹出栈中优先级高于或等于当前运算符的所有运算符,并加入后缀表达式,若碰到“(”或栈空则停止。之后再把当前运算符入栈。按上述方法处理完所有字符后,将栈中剩余运算符依次弹出,并加入后缀表达式。A+B-C*D/E+FAB+CD①④②③⑤AB+CD*E/-F+①②③④⑤*-研/CSKAOYAN中缀表达式转后缀表达式(机算)初始化一个栈,用于保存暂时还不能确定运算顺序的运算符。从左到右处理各个元素,直到末尾。可能遇到三种情况:①遇到操作数。直接加入后缀表达式。②遇到界限符。遇到“(”直接入栈;遇到“)”则依次弹出栈内运算符并加入后缀表达式,直到弹出“(”为止。注意:“(”不加入后缀表达式。③遇到运算符。依次弹出栈中优先级高于或等于当前运算符的所有运算符,并加入后缀表达式,若碰到“(”或栈空则停止。之后再把当前运算符入栈。按上述方法处理完所有字符后,将栈中剩余运算符依次弹出,并加入后缀表达式。A+B-C*D/E+FAB+CD①④②③⑤AB+CD*E/-F+①②③④⑤-*/研/CSKAOYAN中缀表达式转后缀表达式(机算)初始化一个栈,用于保存暂时还不能确定运算顺序的运算符。从左到右处理各个元素,直到末尾。可能遇到三种情况:①遇到操作数。直接加入后缀表达式。②遇到界限符。遇到“(”直接入栈;遇到“)”则依次弹出栈内运算符并加入后缀表达式,直到弹出“(”为止。注意:“(”不加入后缀表达式。③遇到运算符。依次弹出栈中优先级高于或等于当前运算符的所有运算符,并加入后缀表达式,若碰到“(”或栈空则停止。之后再把当前运算符入栈。按上述方法处理完所有字符后,将栈中剩余运算符依次弹出,并加入后缀表达式。A+B-C*D/E+FAB+CD*E①④②③⑤AB+CD*E/-F+①②③④⑤/-研/CSKAOYAN中缀表达式转后缀表达式(机算)初始化一个栈,用于保存暂时还不能确定运算顺序的运算符。从左到右处理各个元素,直到末尾。可能遇到三种情况:①遇到操作数。直接加入后缀表达式。②遇到界限符。遇到“(”直接入栈;遇到“)”则依次弹出栈内运算符并加入后缀表达式,直到弹出“(”为止。注意:“(”不加入后缀表达式。③遇到运算符。依次弹出栈中优先级高于或等于当前运算符的所有运算符,并加入后缀表达式,若碰到“(”或栈空则停止。之后再把当前运算符入栈。按上述方法处理完所有字符后,将栈中剩余运算符依次弹出,并加入后缀表达式。A+B-C*D/E+FAB+CD*E①④②③⑤AB+CD*E/-F+①②③④⑤/-+研/CSKAOYAN中缀表达式转后缀表达式(机算)初始化一个栈,用于保存暂时还不能确定运算顺序的运算符。从左到右处理各个元素,直到末尾。可能遇到三种情况:①遇到操作数。直接加入后缀表达式。②遇到界限符。遇到“(”直接入栈;遇到“)”则依次弹出栈内运算符并加入后缀表达式,直到弹出“(”为止。注意:“(”不加入后缀表达式。③遇到运算符。依次弹出栈中优先级高于或等于当前运算符的所有运算符,并加入后缀表达式,若碰到“(”或栈空则停止。之后再把当前运算符入栈。按上述方法处理完所有字符后,将栈中剩余运算符依次弹出,并加入后缀表达式。A+B-C*D/E+FAB+CD*E/-F①④②③⑤AB+CD*E/-F+①②③④⑤+研/CSKAOYAN中缀表达式转后缀表达式(机算)初始化一个栈,用于保存暂时还不能确定运算顺序的运算符。从左到右处理各个元素,直到末尾。可能遇到三种情况:①遇到操作数。直接加入后缀表达式。②遇到界限符。遇到“(”直接入栈;遇到“)”则依次弹出栈内运算符并加入后缀表达式,直到弹出“(”为止。注意:“(”不加入后缀表达式。③遇到运算符。依次弹出栈中优先级高于或等于当前运算符的所有运算符,并加入后缀表达式,若碰到“(”或栈空则停止。之后再把当前运算符入栈。按上述方法处理完所有字符后,将栈中剩余运算符依次弹出,并加入后缀表达式。A+B-C*D/E+FAB+CD*E/-F+①④②③⑤AB+CD*E/-F+①②③④⑤研/CSKAOYAN中缀表达式转后缀表达式(机算)初始化一个栈,用于保存暂时还不能确定运算顺序的运算符。从左到右处理各个元素,直到末尾。可能遇到三种情况:①遇到操作数。直接加入后缀表达式。②遇到界限符。遇到“(”直接入栈;遇到“)”则依次弹出栈内运算符并加入后缀表达式,直到弹出“(”为止。注意:“(”不加入后缀表达式。③遇到运算符。依次弹出栈中优先级高于或等于当前运算符的所有运算符,并加入后缀表达式,若碰到“(”或栈空则停止。之后再把当前运算符入栈。按上述方法处理完所有字符后,将栈中剩余运算符依次弹出,并加入后缀表达式。A+B*(C-D)–E/FA③②①⑤④①②③④⑤ABCD-*+EF/-研/CSKAOYAN中缀表达式转后缀表达式(机算)初始化一个栈,用于保存暂时还不能确定运算顺序的运算符。从左到右处理各个元素,直到末尾。可能遇到三种情况:①遇到操作数。直接加入后缀表达式。②遇到界限符。遇到“(”直接入栈;遇到“)”则依次弹出栈内运算符并加入后缀表达式,直到弹出“(”为止。注意:“(”不加入后缀表达式。③遇到运算符。依次弹出栈中优先级高于或等于当前运算符的所有运算符,并加入后缀表达式,若碰到“(”或栈空则停止。之后再把当前运算符入栈。按上述方法处理完所有字符后,将栈中剩余运算符依次弹出,并加入后缀表达式。A+B*(C-D)–E/FA③②①⑤④①②③④⑤ABCD-*+EF/-+研/CSKAOYAN中缀表达式转后缀表达式(机算)初始化一个栈,用于保存暂时还不能确定运算顺序的运算符。从左到右处理各个元素,直到末尾。可能遇到三种情况:①遇到操作数。直接加入后缀表达式。②遇到界限符。遇到“(”直接入栈;遇到“)”则依次弹出栈内运算符并加入后缀表达式,直到弹出“(”为止。注意:“(”不加入后缀表达式。③遇到运算符。依次弹出栈中优先级高于或等于当前运算符的所有运算符,并加入后缀表达式,若碰到“(”或栈空则停止。之后再把当前运算符入栈。按上述方法处理完所有字符后,将栈中剩余运算符依次弹出,并加入后缀表达式。A+B*(C-D)–E/FAB③②①⑤④①②③④⑤ABCD-*+EF/-+研/CSKAOYAN中缀表达式转后缀表达式(机算)初始化一个栈,用于保存暂时还不能确定运算顺序的运算符。从左到右处理各个元素,直到末尾。可能遇到三种情况:①遇到操作数。直接加入后缀表达式。②遇到界限符。遇到“(”直接入栈;遇到“)”则依次弹出栈内运算符并加入后缀表达式,直到弹出“(”为止。注意:“(”不加入后缀表达式。③遇到运算符。依次弹出栈中优先级高于或等于当前运算符的所有运算符,并加入后缀表达式,若碰到“(”或栈空则停止。之后再把当前运算符入栈。按上述方法处理完所有字符后,将栈中剩余运算符依次弹出,并加入后缀表达式。A+B*(C-D)–E/FAB③②①⑤④①②③④⑤ABCD-*+EF/-*+研/CSKAOYAN中缀表达式转后缀表达式(机算)初始化一个栈,用于保存暂时还不能确定运算顺序的运算符。从左到右处理各个元素,直到末尾。可能遇到三种情况:①遇到操作数。直接加入后缀表达式。②遇到界限符。遇到“(”直接入栈;遇到“)”则依次弹出栈内运算符并加入后缀表达式,直到弹出“(”为止。注意:“(”不加入后缀表达式。③遇到运算符。依次弹出栈中优先级高于或等于当前运算符的所有运算符,并加入后缀表达式,若碰到“(”或栈空则停止。之后再把当前运算符入栈。按上述方法处理完所有字符后,将栈中剩余运算符依次弹出,并加入后缀表达式。A+B*(C-D)–E/FAB③②①⑤④①②③④⑤ABCD-*+EF/-(*+研/CSKAOYAN中缀表达式转后缀表达式(机算)初始化一个栈,用于保存暂时还不能确定运算顺序的运算符。从左到右处理各个元素,直到末尾。可能遇到三种情况:①遇到操作数。直接加入后缀表达式。②遇到界限符。遇到“(”直接入栈;遇到“)”则依次弹出栈内运算符并加入后缀表达式,直到弹出“(”为止。注意:“(”不加入后缀表达式。③遇到运算符。依次弹出栈中优先级高于或等于当前运算符的所有运算符,并加入后缀表达式,若碰到“(”或栈空则停止。之后再把当前运算符入栈。按上述方法处理完所有字符后,将栈中剩余运算符依次弹出,并加入后缀表达式。A+B*(C-D)–E/FABC③②①⑤④①②③④⑤ABCD-*+EF/-(*+研/CSKAOYAN中缀表达式转后缀表达式(机算)初始化一个栈,用于保存暂时还不能确定运算顺序的运算符。从左到右处理各个元素,直到末尾。可能遇到三种情况:①遇到操作数。直接加入后缀表达式。②遇到界限符。遇到“(”直接入栈;遇到“)”则依次弹出栈内运算符并加入后缀表达式,直到弹出“(”为止。注意:“(”不加入后缀表达式。③遇到运算符。依次弹出栈中优先级高于或等于当前运算符的所有运算符,并加入后缀表达式,若碰到“(”或栈空则停止。之后再把当前运算符入栈。按上述方法处理完所有字符后,将栈中剩余运算符依次弹出,并加入后缀表达式。A+B*(C-D)–E/FABC③②①⑤④①②③④⑤ABCD-*+EF/--(*+研/CSKAOYAN中缀表达式转后缀表达式(机算)初始化一个栈,用于保存暂时还不能确定运算顺序的运算符。从左到右处理各个元素,直到末尾。可能遇到三种情况:①遇到操作数。直接加入后缀表达式。②遇到界限符。遇到“(”直接入栈;遇到“)”则依次弹出栈内运算符并加入后缀表达式,直到弹出“(”为止。注意:“(”不加入后缀表达式。③遇到运算符。依次弹出栈中优先级高于或等于当前运算符的所有运算符,并加入后缀表达式,若碰到“(”或栈空则停止。之后再把当前运算符入栈。按上述方法处理完所有字符后,将栈中剩余运算符依次弹出,并加入后缀表达式。A+B*(C-D)–E/FABCD③②①⑤④①②③④⑤ABCD-*+EF/--(*+研/CSKAOYAN中缀表达式转后缀表达式(机算)初始化一个栈,用于保存暂时还不能确定运算顺序的运算符。从左到右处理各个元素,直到末尾。可能遇到三种情况:①遇到操作数。直接加入后缀表达式。②遇到界限符。遇到“(”直接入栈;遇到“)”则依次弹出栈内运算符并加入后缀表达式,直到弹出“(”为止。注意:“(”不加入后缀表达式。③遇到运算符。依次弹出栈中优先级高于或等于当前运算符的所有运算符,并加入后缀表达式,若碰到“(”或栈空则停止。之后再把当前运算符入栈。按上述方法处理完所有字符后,将栈中剩余运算符依次弹出,并加入后缀表达式。A+B*(C-D)–E/FABCD③②①⑤④①②③④⑤ABCD-*+EF/--(*+研/CSKAOYAN中缀表达式转后缀表达式(机算)初始化一个栈,用于保存暂时还不能确定运算顺序的运算符。从左到右处理各个元素,直到末尾。可能遇到三种情况:①遇到操作数。直接加入后缀表达式。②遇到界限符。遇到“(”直接入栈;遇到“)”则依次弹出栈内运算符并加入后缀表达式,直到弹出“(”为止。注意:“(”不加入后缀表达式。③遇到运算符。依次弹出栈中优先级高于或等于当前运算符的所有运算符,并加入后缀表达式,若碰到“(”或栈空则停止。之后再把当前运算符入栈。按上述方法处理完所有字符后,将栈中剩余运算符依次弹出,并加入后缀表达式。A+B*(C-D)–E/FABCD-③②①⑤④①②③④⑤ABCD-*+EF/-*+

-研/CSKAOYAN中缀表达式转后缀表达式(机算)初始化一个栈,用于保存暂时还不能确定运算顺序的运算符。从左到右处理各个元素,直到末尾。可能遇到三种情况:①遇到操作数。直接加入后缀表达式。②遇到界限符。遇到“(”直接入栈;遇到“)”则依次弹出栈内运算符并加入后缀表达式,直到弹出“(”为止。注意:“(”不加入后缀表达式。③遇到运算符。依次弹出栈中优先级高于或等于当前运算符的所有运算符,并加入后缀表达式,若碰到“(”或栈空则停止。之后再把当前运算符入栈。按上述方法处理完所有字符后,将栈中剩余运算符依次弹出,并加入后缀表达式。A+B*(C-D)–E/FABCD-*+E③②①⑤④①②③④⑤ABCD-*+EF/--研/CSKAOYAN中缀表达式转后缀表达式(机算)初始化一个栈,用于保存暂时还不能确定运算顺序的运算符。从左到右处理各个元素,直到末尾。可能遇到三种情况:①遇到操作数。直接加入后缀表达式。②遇到界限符。遇到“(”直接入栈;遇到“)”则依次弹出栈内运算符并加入后缀表达式,直到弹出“(”为止。注意:“(”不加入后缀表达式。③遇到运算符。依次弹出栈中优先级高于或等于当前运算符的所有运算符,并加入后缀表达式,若碰到“(”或栈空则停止。之后再把当前运算符入栈。按上述方法处理完所有字符后,将栈中剩余运算符依次弹出,并加入后缀表达式。A+B*(C-D)–E/FABCD-*+E③②①⑤④①②③④⑤ABCD-*+EF/-/-研/CSKAOYAN中缀表达式转后缀表达式(机算)初始化一个栈,用于保存暂时还不能确定运算顺序的运算符。从左到右处理各个元素,直到末尾。可能遇到三种情况:①遇到操作数。直接加入后缀表达式。②遇到界限符。遇到“(”直接入栈;遇到“)”则依次弹出栈内运算符并加入后缀表达式,直到弹出“(”为止。注意:“(”不加入后缀表达式。③遇到运算符。依次弹出栈中优先级高于或等于当前运算符的所有运算符,并加入后缀表达式,若碰到“(”或栈空则停止。之后再把当前运算符入栈。按上述方法处理完所有字符后,将栈中剩余运算符依次弹出,并加入后缀表达式。A+B*(C-D)–E/FABCD-*+EF③②①⑤④①②③④⑤ABCD-*+EF/-/-研/CSKAOYAN中缀表达式转后缀表达式(机算)初始化一个栈,用于保存暂时还不能确定运算顺序的运算符。从左到右处理各个元素,直到末尾。可能遇到三种情况:①遇到操作数。直接加入后缀表达式。②遇到界限符。遇到“(”直接入栈;遇到“)”则依次弹出栈内运算符并加入后缀表达式,直到弹出“(”为止。注意:“(”不加入后缀表达式。③遇到运算符。依次弹出栈中优先级高于或等于当前运算符的所有运算符,并加入后缀表达式,若碰到“(”或栈空则停止。之后再把当前运算符入栈。按上述方法处理完所有字符后,将栈中剩余运算符依次弹出,并加入后缀表达式。A+B*(C-D)–E/FABCD-*+EF/-③②①⑤④①②③④⑤ABCD-*+EF/-研/CSKAOYAN中缀表达式转后缀表达式(机算)初始化一个栈,用于保存暂时还不能确定运算顺序的运算符。从左到右处理各个元素,直到末尾。可能遇到三种情况:①遇到操作数。直接加入后缀表达式。②遇到界限符。遇到“(”直接入栈;遇到“)”则依次弹出栈内运算符并加入后缀表达式,直到弹出“(”为止。注意:“(”不加入后缀表达式。③遇到运算符。依次弹出栈中优先级高于或等于当前运算符的所有运算符,并加入后缀表达式,若碰到“(”或栈空则停止。之后再把当前运算符入栈。按上述方法处理完所有字符后,将栈中剩余运算符依次弹出,并加入后缀表达式。((15÷

(7−(1+1)))×

3)−(2+(1+1))栈是否会③②①④⑦⑥⑤①②③

⑥⑦15711+-

÷

3

×

211++-溢出?研/CSKAOYAN中缀表达式的计算(用栈实现)中缀转后缀+后缀表达式求值用栈实现中缀表达式的计算:初始化两个栈,操作数栈和运算符栈两个算法的结合若扫描到操作数,压入操作数栈若扫描到运算符或界限符,则按照“中缀转后缀”相同的逻辑压入运算符栈(期间也会弹出运算符,每当弹出一个运算符时,就需要再弹出两个操作数栈的栈顶元素并执行相应运算,运算结果再压回操作数栈)研/CSKAOYAN后缀表达式的计算(机算)用栈实现后缀表达式的计算:①从左往右扫描下一个元素,直到处理完所有元素②若扫描到操作数则压入栈,并回到①;否则执行③③若扫描到运算符,则弹出两个栈顶元素,执行相应运算,运算结果压回栈顶,回到①栈A+B-C*D/E+F①④②③⑤①②③④⑤AB+CD*E/-F+A研/CSKAOYAN后缀表达式的计算(机算)用栈实现后缀表达式的计算:①从左往右扫描下一个元素,直到处理完所有元素②若扫描到操作数则压入栈,并回到①;否则执行③③若扫描到运算符,则弹出两个栈顶元素,执行相应运算,运算结果压回栈顶,回到①栈A+B-C*D/E+F①④②③⑤①②③④⑤AB+CD*E/-F+BA研/CSKAOYAN后缀表达式的计算(机算)用栈实现后缀表达式的计算:①从左往右扫描下一个元素,直到处理完所有元素②若扫描到操作数则压入栈,并回到①;否则执行③③若扫描到运算符,则弹出两个栈顶元素,执行相应运算,运算结果压回栈顶,回到①栈A+B-C*D/E+F注意:先出栈的①④②③⑤①②③④⑤是“右操作数”AB+CD*E/-F++BA

A+B研/CSKAOYAN后缀表达式的计算(机算)用栈实现后缀表达式的计算:①从左往右扫描下一个元素,直到处理完所有元素②若扫描到操作数则压入栈,并回到①;否则执行③③若扫描到运算符,则弹出两个栈顶元素,执行相应运算,运算结果压回栈顶,回到①栈A+B-C*D/E+FC*D①④②③⑤①②③④⑤AB+CD*E/-F+DCA+B研/CSKAOYAN后缀表达式的计算(机算)用栈实现后缀表达式的计算:①从左往右扫描下一个元素,直到处理完所有元素②若扫描到操作数则压入栈,并回到①;否则执行③③若扫描到运算符,则弹出两个栈顶元素,执行相应运算,运算结果压回栈顶,回到①栈A+B-C*D/E+F(C*D)/E①④②③⑤①②③④⑤AB+CD*E/-F+EC*DA+B研/CSKAOYAN后缀表达式的计算(机算)用栈实现后缀表达式的计算:①从左往右扫描下一个元素,直到处理完所有元素②若扫描到操作数则压入栈,并回到①;否则执行③③若扫描到运算符,则弹出两个栈顶元素,执行相应运算,运算结果压回栈顶,回到①栈A+B-C*D/E+F(A+B)-((C*D)/E)①④②③⑤①②③④⑤AB+CD*E/-F+A+B(C*D)/E研/CSKAOYAN后缀表达式的计算(机算)用栈实现后缀表达式的计算:①从左往右扫描下一个元素,直到处理完所有元素②若扫描到操作数则压入栈,并回到①;否则执行③③若扫描到运算符,则弹出两个栈顶元素,执行相应运算,运算结果压回栈顶,回到①栈A+B-C*D/E+F((A+B)-((C*D)/E))+F①④②③⑤①②③④⑤AB+CD*E/-F+F(A+B)-((C*D)/E)研/CSKAOYAN后缀表达式的计算(机算)用栈实现后缀表达式的计算:①从左往右扫描下一个元素,直到处理完所有元素②若扫描到操作数则压入栈,并回到①;否则执行③注意:先出栈的是“右操作数”③若扫描到运算符,则弹出两个栈顶元素,执行相应运算,运算结果压回栈顶,回到①A+B-C*D/E+F栈用于存放当前暂时还不能确定运算次序的操作数①④②③⑤①②③④⑤AB+CD*E/-F+((A+B)-((C*D)/E))+F研/CSKAOYAN中缀表达式转后缀表达式(机算)初始化一个栈,用于保存暂时还不能确定运算顺序的运算符。从左到右处理各个元素,直到末尾。可能遇到三种情况:①遇到操作数。直接加入后缀表达式。②遇到界限符。遇到“(”直接入栈;遇到“)”则依次弹出栈内运算符并加入后缀表达式,直到弹出“(”为止。注意:“(”不加入后缀表达式。③遇到运算符。依次弹出栈中优先级高于或等于当前运算符的所有运算符,并加入后缀表达式,若碰到“(”或栈空则停止。之后再把当前运算符入栈。按上述方法处理完所有字符后,将栈中剩余运算符依次弹出,并加入后缀表达式。A+B-C*D/E+F用于存放当前暂时还不能确定运①④②③⑤算次序的运算符AB+CD*E/-F+AB+CD①②③④⑤*-研/CSKAOYAN中缀表达式的计算(用栈实现)中缀转后缀+后缀表达式求值用栈实现中缀表达式的计算:初始化两个栈,操作数栈和运算符栈两个算法的结合若扫描到操作数,压入操作数栈若扫描到运算符或界限符,则按照“中缀转后缀”相同的逻辑压入运算符栈(期间也会弹出运算符,每当弹出一个运算符时,就需要再弹出两个操作数栈的栈顶元素并执行相应运算,运算结果再压回操作数栈)研/CSKAOYAN中缀表达式的计算(用栈实现)用栈实现中缀表达式的计算:初始化两个栈,操作数栈和运算符栈若扫描到操作数,压入操作数栈若扫描到运算符或界限符,则按照“中缀转后缀”相同的逻辑压入运算符栈(期间也会弹出运算符,每当弹出一个运算符时,就需要再弹出两个操作数栈的栈顶元素并执行相应运算,运算结果再压回操作数栈)A+B-C*D/E+F运算符栈操作数栈①④②③⑤AB+CD*E/-F+①②③④⑤A研/CSKAOYAN中缀表达式的计算(用栈实现)用栈实现中缀表达式的计算:初始化两个栈,操作数栈和运算符栈若扫描到操作数,压入操作数栈若扫描到运算符或界限符,则按照“中缀转后缀”相同的逻辑压入运算符栈(期间也会弹出运算符,每当弹出一个运算符时,就需要再弹出两个操作数栈的栈顶元素并执行相应运算,运算结果再压回操作数栈)A+B-C*D/E+F运算符栈操作数栈①④②③⑤AB+CD*E/-F+①②③④⑤+A研/CSKAOYAN中缀表达式的计算(用栈实现)用栈实现中缀表达式的计算:初始化两个栈,操作数栈和运算符栈若扫描到操作数,压入操作数栈若扫描到运算符或界限符,则按照“中缀转后缀”相同的逻辑压入运算符栈(期间也会弹出运算符,每当弹出一个运算符时,就需要再弹出两个操作数栈的栈顶元素并执行相应运算,运算结果再压回操作数栈)A+B-C*D/E+F运算符栈操作数栈①④②③⑤AB+CD*E/-F+①②③④⑤+BA研/CSKAOYAN中缀表达式的计算(用栈实现)用栈实现中缀表达式的计算:初始化两个栈,操作数栈和运算符栈若扫描到操作数,压入操作数栈若扫描到运算符或界限符,则按照“中缀转后缀”相同的逻辑压入运算符栈(期间也会弹出运算符,每当弹出一个运算符时,就需要再弹出两个操作数栈的栈顶元素并执行相应运算,运算结果再压回操作数栈)A+B-C*D/E+F运算符栈操作数栈①④②③⑤AB+CD*E/-F+①②③④⑤+

-BA

A+B研/CSKAOYAN中缀表达式的计算(用栈实现)用栈实现中缀表达式的计算:初始化两个栈,操作数栈和运算符栈若扫描到操作数,压入操作数栈若扫描到运算符或界限符,则按照“中缀转后缀”相同的逻辑压入运算符栈(期间也会弹出运算符,每当弹出一个运算符时,就需要再弹出两个操作数栈的栈顶元素并执行相应运算,运算结果再压回操作数栈)A+B-C*D/E+F运算符栈操作数栈①④②③⑤AB+CD*E/-F+①②③④⑤-CA+B研/CSKAOYAN中缀表达式的计算(用栈实现)用栈实现中缀表达式的计算:初始化两个栈,操作数栈和运算符栈若扫描到操作数,压入操作数栈若扫描到运算符或界限符,则按照“中缀转后缀”相同的逻辑压入运算符栈(期间也会弹出运算符,每当弹出一个运算符时,就需要再弹出两个操作数栈的栈顶元素并执行相应运算,运算结果再压回操作数栈)A+B-C*D/E+F运算符栈操作数栈①④②③⑤AB+CD*E/-F+①②③④⑤*-CA+B研/CSKAOYAN中缀表达式的计算(用栈实现)用栈实现中缀表达式的计算:初始化两个栈,操作数栈和运算符栈若扫描到操作数,压入操作数栈若扫描到运算符或界限符,则按照“中缀转后缀”相同的逻辑压入运算符栈(期间也会弹出运算符,每当弹出一个运算符时,就需要再弹出两个操作数栈的栈顶元素并执行相应运算,运算结果再压回操作数栈)A+B-C*D/E+F运算符栈操作数栈①④②③⑤AB+CD*E/-F+①②③④⑤*-DCA+B研/CSKAOYAN中缀表达式的计算(用栈实现)用栈实现中缀表达式的计算:初始化两个栈,操作数栈和运算符栈若扫描到操作数,压入操作数栈若扫描到运算符或界限符,则按照“中缀转后缀”相同的逻辑压入运算符栈(期间也会弹出运算符,每当弹出一个运算符时,就需要再弹出两个操作数栈的栈顶元素并执行相应运算,运算结果再压回操作数栈)A+B-C*D/E+F运算符栈操作数栈①④②③⑤AB+CD*E/-F+①②③④⑤*

/-DCA+B研/CSKAOYAN中缀表

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论