首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

利用计算后缀表达式

上篇笔记我们已经知道了后缀表达式以及他的计算方法,本篇我会用代码实现利用计算后缀表达式计算步骤 初始化一个空。...此用来对要运算的数字进出使用 如果遇到符号就把上的两个元素拿出来计算然后再压 遇到数字就压,遇到符号就出两个数字然后计算 直到表达式结束 代码实现 #include #include...= '-' || c == '*' || c == '/') { return true; } return false; } PerformOperation函数是通过传入的操作符来计算上元素的...Isnumber判断参数是否是数字 IsOperator判断是否是操作符 整体逻辑 根据字符串从左面开始扫面(我这里的是for循环你也可以其他的循环) 如果是操作符,则pop顶两个元素进行运算...如果是数字,则把字符转成整数(因为后续要参加计算)并入,经过反复计算,最后留在顶的就是我们要的结果。 eg:计算931-2*+52/+

13830

利用实现中缀表达式计算

如下图 根据用户输入的表达式,得出计算结果 思路分析 本题看似简单,实则不然,要实现这个功能我们不能简单的直接将这个字符串丢给程序 如下 int a = 7*2*2-5+1-5*3-3 // 3...我们要模拟计算机是如何解析,并计算出这样一个字符串的结果。...则直接入符号 4.当表达式遍历完毕时,就顺序的从数和符号中pop出相应的数和符号,并进行运算 5.最后数中只有一个数字,即最后的结果 图示 如下例计算 3+2*6-2 第一次扫描时,发现是数字,...,我们还得给添加几个方法 1.查看顶中的元素 2.计算符号优先级 3.判断是否为运算符 4.计算方法 ......,就顺序的从数和符号中pop出相应的数和符号进行计算 while (true){ //当符号为空时,说明计算到最后的结果了,数中只有一个数字即结果

49010
您找到你想要的搜索结果了吗?
是的
没有找到

【CPP】,后缀表达式计算

我们平时计算时列的计算式叫做中缀表达式,即运算符放在两个运算数中间的计算式(例:1+1)。...但是,这样的式子计算机并不能很好的理解,在遇到有括号加入时就会更难进行编程,于是在这样的需求下,另一种计算式被发明了:后缀表达式。...移动的p_now指针来标识顶的位置。 接下来的重点,是如何将中缀表达式转化为后缀表达式。...首先,我们初始化两个,一个用于存放转换完成的式子(目标),另一个用于暂时存放操作符(操作符),并用一个字符指针来扫描字符串,一个int来表示目前的扫描状态。 ?...这样我们便完成了转换中缀表达式的步骤了。然后就是如何计算后缀表达式呢。

87820

C语言-实现表达式求值(顺序)

(In) 表达式求值函数(evaluateExpression) 其他:操作符(OPTR),操作数(OPND) ---- 谈谈我遇到的问题: 1.该选择数字还是字符?...运算数是整型,而运算符是字符型,若选用字符,存入操作数时只能以‘0’–‘9’的字符形式存入,那么意味着无法存取两位以上的数字,也无法运算两位以上的数字,因为运算过程中的中间值超过两位也将无法转化成字符形态入计算...gets(str);或者scanf进行字符串读入表达式后,存储方式如下: 多位数的存储方式: 我们可以通过str[i]进行逐位的访问,通过i++;实现逐位的偏移,那么就可以写成str...此时我们就成功的归并将34读取入 ,接下来再看4位的数5473如何读取,首先X1读取5,归并至X2(第一次归并,此时X1=5;X2=5),接着让X1读取4,识别到X1是数字,归并至X2(第二次归并,...此算法用于计算整型,若要计算浮点数,把相应的类型更换成double即可实现。 算法运算逻辑是先以字符型读入字符数组中,再将字符型转换为整型存入数字中。

1.4K10

【程序填空】表达式计算应用)C++

题目描述 使用C++自带的stack模板来实现四则运算表达式求值 算法描述参考第3.2.5节 算法伪代码参考P53-54的算法3.4 例如 1....Pop(OPND, a); 表示弹出OPND的顶元素,并把顶元素放入变量a中。...(); 大家主要是改造表达式求值函数EvaluateExpression的代码 输入 第一个输入t,表示有t个实例 第二行起,每行输入一个表达式,每个表达式末尾带#表示结束 输入t行 输出 每行输出一个表达式计算结果...,计算结果浮点数(含2位小数)的格式表示 参考代码如下: #include #include using namespace std; int main...- ),那么需要开始计算这个运算符前面的数值,即两次弹出操作数顶元素用来计算计算的运算符是当前运算符顶元素。

15330

的应用----算术表达式计算问题(中缀转后缀,后缀计算)

的应用----算术表达式计算问题(中缀转后缀,后缀计算) 问题引入:算术表达式计算是编译系统中的一个基本问题,其实现方法是堆栈的一个典型应用。任何一个算术表达式都是由操作数、运算符和分界符组成的。...算术表达式计算分为两步: 中缀表达式转为后缀表达式 后缀表达式计算。...4.计算过程 二、后缀表达式计算 1.算法思想: 设置一个堆栈存放操作数,从左至右依次扫描后缀算术表达式,每读到一个操作数就将其进,每读到一个运算符就从顶取出两个操作数施以改运算符所代表的运算操作...,并把该运算结果作为一个新的操作数入,此过程一直进行到后缀算术表达式读完,最后顶的操作数就是改后缀算数表达式的运算结果。...可以看到,上述的分析过程和结果都正确,其实熟悉编译原理的同学可以直接“移进”和“规约动作”实现中缀算数表达式到后缀算数表达式的转换。

67620

的应用中缀表达式转换为后缀表达式后缀表达式计算

中缀表达式转换为后缀表达式 后缀表达式 做数学运算时,经常使用的是中缀表达式,即“操作数 运算符 操作数”。在计算机处理的时候更习惯后缀表达式,即“操作数 操作数 运算符”。...例如a + b * c转换为后缀表达式a b c * +,使用可以将中缀表达式转换为后缀表达式,具体的方法为: 扫描到数字直接输出 扫描到运算符则与顶比较,若扫描到的运算符优先级低于或等于顶运算符的优先级...,则弹直到空或顶运算符优先级低于扫描到的运算符,之后运算符入;否则直接入。...base_stack.New_link_stack() topost := To_postfix{} topost.data_stack = link return &topost } 后缀表达式计算...计算方法 后缀表达式计算比较简单,顺序扫描整个后缀表达式: 若遇到数字,直接入 若遇到运算符,弹两次取出两个数字,按运算符运算,将结果再次入 这样扫描完整个后缀表达式之后,中就应该只有一个数

1.4K70

Leetcode:队列实现实现队列

//下面的都是C语言写的,为使用STL // 链式结构:表示队列 typedef int QDataType; typedef struct QListNode { struct QListNode...* int param_3 = myStackTop(obj); * bool param_4 = myStackEmpty(obj); * myStackFree(obj); */ 实现队列...思路: 首先创建两个,一个用来入队列,一个用来出队列,出队列时,如果出队列的为空,则将入队列的中的元素弹出到出队列的再出队列,否则,直接出。...// C语言所写 //只能先进后出 //每个元素最后进出的相对顺序不唯一,可以边进边出 typedef int STDataType; typedef struct Stack { int...* a; //存储内元素的数组 int top; // 标识顶位置的,代表顶元素的下一个位置(也可以代表是顶元素,但为空时top==-1) int capacity; }ST; void

12310

实现队列

文章目录 题目介绍 思路分析 代码实现 C语言版本 C++版本 上一篇文章我们讲解了如何用队列实现,那这篇文章我们再来看一个兄弟题目——实现队列 题目介绍 链接: link 仅使用两个实现先入先出队列...思路是这样的: 让我们两个来实现 我们把其中一个命名为pushstack,只用来入数据(队尾入数据),另一个命名为popstack,只用来出数据(对头出数据) 比如我们现在入队列1 2...所以,总结一下: 队尾入数据的时候,永远把数据入到pushstack里面; 队头出数据的时候,要判断一下:如果popstack不为空,直接出popstack顶的元素即可,如果popstack为空...接着来看——pop:移除队头元素并返回 那这个其实就可以复用上面的peek函数,先调用一下peek接口,获取popstack顶的元素即队头元素作为返回值,当然返回之前再去pop掉popstack顶元素即可...代码实现 C语言版本 C语言实现的话,还是要自己造轮子,这里我就直接拷贝之前写过的: 接着是本题的代码实现: 然后 就过啦 C++版本 C++就可以直接STL里面的stack,

5810

的应用——表达式求值

概要 表达式求值问题可以说是一个经典问题。具体思路就是首先把输入的中缀表达式转换为后缀表达式,然后再根据后缀表达式进行计算求值。...---- 中缀表达式转换为后缀表达式 首先我们设定运算符在进前与进后的优先级: ? 首先在把“#”进行压,并在中缀表达式追加“#”。“#”作为结束标志。...对中缀表达式进行遍历,遇到数字进行输出到后缀表达式中 如果遇到运算符,把顶的元素(前者)的内优先级与即将入元素(后者)的外优先级进行比较,如前者小,则运算符入,否则,则把顶元素(前者)出并输出到后缀表达式中...---- 后缀表达式求值 对后缀表达式进行遍历,如果是数字就入,如果是运算符,就连续出两次的结果进行保存,之后进行相应运算,把运算结果入,直至遍历结束,结果为顶元素。...); return after; } }; //这是后缀表达式计算类 class Sum{ private: int* sum

58610

队列实现

文章目录 题目介绍 思路分析 代码实现 C语言版本 C++版本 我们一起来看这样一道题目 题目介绍 链接: link 和队列呢我们之前的文章都有讲解过,当时我们是顺序表(数组)来实现的,队列采用单链表来实现的...而现在这道题呢要让我们两个队列去实现一个,那该怎么做呢?...empty: 判空,如果两个队列都为空,就是为空 代码实现 我们来写一下代码: C语言版本 这道题如果C语言写的话,会麻烦一点,因为需要我们自己造轮子,写一个队列的数据结构,不过我们之前实现过...,可以直接: 我就直接拷贝过来 然后我们来写这道题的代码: 题目给的代码模板是这样的,我们来写一下 首先这个就是的结构定义嘛,当然他这里给的是一个匿名结构体,那正常匿名结构体类型只能在定义的时候创建结构体变量...我们可以直接 各个接口实现的思路还是一样的,就不在多说了 class MyStack { public: MyStack() { } void push(int

5510
领券