栈的应用有很多,四则运算是一个比较常见的应用。对于四则运算,括号内的要先运算,而且还要先乘除后加减,又要涉及到负数和浮点数,看上去简简单单的式子,其实暗藏杀机。 常用的方法是利用后缀表达式(逆波兰)进行计算。主要分为两步: (1)将中缀表达式转化为后缀表达式(栈用来进出运算的符号): 从左到右遍历中缀表达式的每一个数字和符号,若是数字就输出,既成为后缀表达...
分类:
其他好文 时间:
2014-07-16 17:32:59
阅读次数:
279
计算机的本质工作就是做数学运算,那计算机可以读入字符串"1+2+3+4+5+6+7"并计算值吗?
答案是肯定的。
这里我基本实现了个位数的加减乘除,当然这个算法最简单的解决方式是采用二叉树(后面会实现~),这里作出了栈的实现方式。
首先引入两个概念:
中缀表达式和后缀表达式
1,在生活中我们通常书写1+1的时候都会写成1+1,废话~,这就是中缀表达式,更符合人们的思维习惯与想法。
2,所谓后缀表达式就是将运算符写在操作数的后面,这样更符合计算机的思维。...
分类:
其他好文 时间:
2014-06-19 11:05:41
阅读次数:
364
---恢复内容开始---后缀表达式--->中缀表达式①.读到操作数,立刻放到输出中②.读到操作符,入栈,左括号也入栈③.读到右括号,依次出栈直到左括号(括号不输出)④.读到优先级低的操作符,原栈中操作符依次出栈,直到更低优先级,然后新的操作符入栈(保证栈中元素优先级
高-->低)中缀 a+b*c+(...
分类:
其他好文 时间:
2014-05-26 22:23:52
阅读次数:
296
#include//中缀表达式求值
#include
using namespace std;
int precede(char t1,char t2) //shuru//判断优先级
{
int t=0;
switch(t2)
{
case '+':
case '-':
if(t1=='(...
分类:
其他好文 时间:
2014-05-22 07:48:44
阅读次数:
237
有好多朋友评论以前的那篇博文说:代码中间没有注释。由于课程一直比较紧张,所以答应的注释直到今天才写,发表出来,给大家共享!#include
#include
#include
#include
#include
using namespace std;
//为+,-,*,/运算符 设定优先级
map priority;
void initMap()
{
//+,-运算符的优先级...
分类:
编程语言 时间:
2014-05-18 07:35:21
阅读次数:
290
中缀表达式求值问题
中缀表达式的求值问题是一个比较常见的问题之一,我们通常在编写程序时,直接写出表达式让编译器去处理,很少去关心编译器是怎么对表达式进行求值的,今天我们来一起了解一下其中具体的原理和过程。
表达式一般来说有三种:前缀表达式、中缀表达式、后缀表达式...
分类:
其他好文 时间:
2014-05-15 10:58:08
阅读次数:
313
一、后缀表达式求值
后缀表达式也叫逆波兰表达式,其求值过程可以用到栈来辅助存储。
假定待求值的后缀表达式为:6 5 2 3 + 8 * + 3 + *,则其求值过程如下:
(1)遍历表达式,遇到的数字首先放入栈中,依次读入6 5 2 3 此时栈如下所示:
(2)接着读到“+”,则从栈中弹出3和2,执行3+2,计算结果等于5,并将5压入到栈中。...
分类:
其他好文 时间:
2014-05-03 16:59:21
阅读次数:
309
题目链接:click here~
中文题意思非常明了就不解释了。。思路就是用栈,要是没有括号此题灰常简单,有括号了就要好好理清思路了
1.是数字就直接进队列或者输出,此题因为是有浮点数,所以不推荐进队列,因为要是一个数字还好,可以用queue来写然后用%C来输出,但是小数怎么办?我觉得也许可以队列输出的时候判断下一个char元素是+ - * / 的时候才输出空格那样就要用2个变量来保存,这样的...
分类:
其他好文 时间:
2014-04-30 22:17:40
阅读次数:
282