大话数据结构8之栈和队列2
来源:互联网 发布:java同步锁的种类 编辑:程序博客网 时间:2024/06/17 19:49
栈的应用--四则运算表达式求值
后缀(逆波兰)表示法定义:不需要括号的后缀表达式。例:9+(3-1)*3+10/2,后缀表达式为9 3 1 - 3 * + 10 2 / +,所有的符号都是在要运算的数字后面出现
后缀表达式计算结果:还是上例
<1>初始化一个空栈,此栈用于对要运算的数字进出使用;
<2>后缀表达式中的前三个都是数字,所以把运算符前面的数值依次进栈:9、3、1,后面接着符号“+”;
<3>接下来是"-",所以将栈中的1出栈作为减数,3出栈作为被减数即运算3-1得到2,再将2进栈;
<4>接着是数字3进栈;
<5>后面的符号是*,就意味着栈中的3和2出栈,即2*3得到6,再将6进栈;
<6>接着又有一个"+",所以6和9出栈,6和9相加得到15,15再进栈;
<7>紧接着的是10与2两个数字进栈;
<8>接着是符号/2和10出栈,10除以2得到5,再将5进栈;
<9>最后一个符号是+,所以15和5出栈并相加得到20,将20进栈;
<10>结果是当20出栈,栈变空。
中缀表达式转后缀表达式:
中缀表达式就是我正常用到的标准四则运算表达式,那么我们该如何实现从中缀转变为后缀的转化。
例:将中缀表达式9+(3-1)*3+10/2转化成后缀表达式9 3 1 - 3 * + 10 2 / +
<1>初始化一个空栈,用来对符号进出栈使用;
<2>第一个字符是数字9,输出9,后面是符号+;
<3>第三个字符是符号(,但是是左括号,还没有配对,所以进栈;
<4>第四个字符是数字3,输出3,总表达式9 3,接着是-,进栈;
<5>接着是数字1,输出,总表达式为9 3 1,接着后面的符号是),因为可以同此前的(相匹配,所以()依次出栈,并输出,直到(也出栈为止,而在(上方的只有-,所以输出-,则总输出表达式是9 3 1 -;
<6>接着是数字3,输出总表达式为9 3 1 - 3,紧接着是符号*,因为此时栈顶符号为+,优先级低于*,因而不会输出,*进栈;
<7>之后是符号+,此时栈顶元素*的优先级高于+,则该元素输出再将+进栈,总输出表达式是:9 3 1 - 3 * +;
<8>紧接着是数字10,输出,总表达式变为9 3 1 - 3 * + 10,后面是符号/,符号/进栈;
<9>最后的数字是2,输出,总表达式是9 3 1 - 3 * + 10 2;
<10>因为已经到达最后,所以将栈中符号全部出栈并输出,所以最终输出的后缀表达式结果为9 3 1 - 3 * + 10 2 / +。
- 大话数据结构8之栈和队列2
- 大话数据结构8之栈和队列2
- 大话数据结构读书笔记 2 ---栈和队列
- 大话数据结构2 - 栈和队列
- 大话数据结构 --栈和队列
- 大话数据结构之队列
- 大话数据结构(四) 栈和队列
- 大话数据结构7栈和队列1
- 大话数据结构9栈和队列
- 大话数据结构笔记-栈和队列
- 《大话数据结构》读书笔记之链式队列和源码
- 《大话数据结构》笔记之 第四章 栈与队列
- 大话数据结构读书笔记(四)-栈和队列
- 大话数据结构之栈
- 数据结构(2)之栈和队列
- 数据结构之栈和队列
- 数据结构之栈和队列
- 数据结构之栈和队列
- Android动画----Scale
- 如何检测棋盘格
- Angular2 表单form
- js案例 移动端左右滑动touch+transform
- Tensorflow学习笔记
- 大话数据结构8之栈和队列2
- (十六)备忘录模式详解(都市异能版)
- Servlet 监听
- 栅栏染色-动态规划
- 那些年在WebView上踩过的坑
- 如何确定CPU是大端字节序还是小端字节序?
- (十七)迭代器模式详解(foreach的精髓)
- C语言——使用scanf函数时需要注意的问题
- 【HTML5】Curved motion