数据结构与算法(9)--后缀表达式
来源:互联网 发布:数据监测系统那里有 编辑:程序博客网 时间:2024/05/08 21:31
后缀表达式的特点就是计算机运算非常方便,需要用到栈;计算机处理过程只需要顺序读入,如果遇到数字,则放入栈中,如果是运算符,则将两个栈中数字取出进行运算;
比如1+2的后缀表达式为12+;
而栈可以把一般的中缀表达式变成后缀表达式,并且计算后缀表达式得出结果,因此此应用在计算器中非常常用。
把中缀表达式转换成后缀表达式需要循几个规则:
(1)如果读入操作数,则直接放入输出字符串。
(2)如果读入一般运算符如+-*/,则放入堆栈,但是放入堆栈之前必须要检查栈顶,并确定栈顶运算符的优先级比放入的运算符的优先级低;如果放入的优先级较低,则需要将栈顶的运算符放入输出字符串。
(3)如果读入(,因为左括号优先级最高,因此放入栈中,但是注意,当左括号放入栈中后,则优先级最低。
(4)如果读入),则将栈中运算符取出放入输出字符串,直到取出(为止,注意:()不输出到输出字符串。
(5)顺序读完表达式,如果栈中还有操作符,则弹出,并放入输出字符串。
计算后缀表达式需要遵循以下几个规则:
(1)如果是操作数,则放入栈中。
(2)如果是操作符,则取出栈中两个操作数,进行运算后,将结果放入栈中。
(3)直到最后栈中只有一个元素,此元素就是计算结果。
#include <stdio.h>#include <math.h>#define MAXSIZE 100int IsOperator(char ch){switch(ch){ case '^': case '*': case '/': case '%': case '+': case '-': return 1; default: return 0;}}void calc(char *pArr, int *pResult){int data[MAXSIZE];int top = -1;char ch;int x, y;if(pArr==NULL || pResult==NULL) return; while((ch=*pArr++) != '#'){ if(!IsOperator(ch)) { data[++top] = (int)(ch-48); } else { y = data[top--]; x = data[top--]; switch(ch) { case '^': x = pow(x, y); break; case '*': x = x*y; break; case '/': x = x/y; break; case '%': x = x%y; break; case '+': x = x+y; break; case '-': x = x-y; break; default: ; } data[++top] = x; }}*pResult = data[top--]; }int main(){ char arr[] = "32422*+13*-^*5-#"; int x; calc(arr, &x); printf("The result is %d\n", x); return 0;}
—————————————————————————————————
本文原创自Slience的csdn技术博客。
本博客所有原创文章请以链接形式注明出处。
欢迎关注本技术博客,本博客的文章会不定期更新。
大多数人想要改造这个世界,但却罕有人想改造自己。
世上没有绝望的处境,只有对处境绝望的人。
————By slience
—————————————————————————————————
- 数据结构与算法(9)--后缀表达式
- 数据结构与算法-表达式转为后缀式
- 数据结构与算法分析计算后缀表达式
- 数据结构与算法(Java描述)-8、中缀表达式转换后缀表达式算法
- 【算法与数据结构】中缀表达式转为后缀表达式
- 【数据结构】后缀表达式算法实现
- python数据结构与算法 11 后缀表达式求值
- 数据结构与算法分析 c++11 练习3.22 中缀表达式转后缀表达式,后缀表达式计算, 多项式计算
- 数据结构与算法笔记 lesson 12 中缀表达式转后缀表达式
- 数据结构与算法Java版——中缀表达式转后缀表达式
- python数据结构与算法 10 栈的应用之中缀转后缀表达式算法的实现
- 【数据结构】栈的应用---四则运算表达式求值(中缀表达式与后缀表达式转换)
- 【数据结构与算法基础】栈及其应用后缀、中缀表达式 / Stack and postfix/infix expression
- 《java数据结构与算法》笔记-CH4-8栈结构实现后缀表达式计算结果
- 数据结构算法:中缀表达式转化为后缀表达式
- 《数据结构和算法》之中缀表达式、后缀表达式转换
- 数据结构与算法分析后缀变中缀
- 数据结构--中缀表达式转为后缀表达式(逆波兰表达式)
- 想给你的APP加上用户反馈功能吗?A…
- 用Fiddler抓取Android、iPhone网络…
- Android JNI必须掌握的五点
- java连接mysql
- C/C++基础知识总结1
- 数据结构与算法(9)--后缀表达式
- MyDBUtils
- c# DataGridView添加合计行的例子
- 单页面多Highcharts图形,高度宽度自适应
- 面向对象技术类与类的关系
- Servlet生命周期与工作原理
- [NOSQL] Redis介绍
- intel历代架构演进3——酷睿微架构
- POJ 3259 Wormholes (Bellman_Ford)