【中缀转换成后缀或者前缀的思想、过程以及算法实现】
来源:互联网 发布:mac平面设计用什么软件 编辑:程序博客网 时间:2024/06/06 09:06
首先,介绍一下中缀转换成前缀和后缀的思想(有摘抄的部分):
这里我给出一个中缀表达式~
a+b*c-(d+e)
第一步:按照运算符的优先级对所有的运算单位加括号~
式子变成拉:((a+(b*c))-(d+e))
第二步:转换前缀与后缀表达式
前缀:把运算符号移动到对应的括号前面
则变成拉:-( +(a *(bc)) +(de))
把括号去掉:-+a*bc+de 前缀式子出现
后缀:把运算符号移动到对应的括号后面
则变成拉:((a(bc)* )- (de)+ )-
把括号去掉:abc*-de+- 后缀式子出现
其次,把前缀转换成后缀的过程(此仅提供前缀转换成后缀,不提供转换成后缀后通过后缀表达式计算结果)
(1)首先定义一个数组s1,把中缀表达式存储在数组s1中;并且定义一个动态数组s2。
(2)其次,定义一个栈s。
(3)然后从数组中从s1[0]开始一个个取出字符压入栈s中,遇到'#'字符结束。在这个过程中:遇到数字的时候放入数组s2中;遇到运算符时,先与栈s的栈顶元素比较,如果运算级大于栈顶运算符,将运算符压入栈s中并令栈顶top++,否则栈顶元素出栈后放入数组s2中。
(4)当遇到’#‘字符的时候,把'#'字符放入数组s2中。转换过程结束
(5)while(s2[j]!='#') printf("%c",s2[j++]);打印出后缀表达式
最后,中缀转换成后缀表达式的代码如下(中缀转换成前缀的同理):
#include<stdio.h>#include<malloc.h>#define StackMaxSize 30typedef struct stack{char a[StackMaxSize];int top;}STACK;int Pre(char op){switch(op){case '+':case '-':return 1;case '*':case '/':return 2;case '(':case '#':default:return 0;}}char *Change(char *s1){STACK s;int i=0,j=0;char ch,*s2;s2=(char *)malloc(sizeof(char));s.top=-1;s.a[++s.top]='#';ch=s1[i++];while(ch!='#'){if(ch=='(') {s.a[++s.top]=ch;ch=s1[i++];}else if(ch==')'){while(s.a[s.top]!='('){s2[j++]=s.a[s.top--];}s.top--;ch=s1[i++];}else if(ch=='+'||ch=='-'||ch=='*'||ch=='/'){while(Pre(s.a[s.top])>=Pre(ch)){s2[j++]=s.a[s.top--];}s.a[++s.top]=ch;ch=s1[i++];}else{s2[j++]=ch;ch=s1[i++];}}ch=s.a[s.top--];while(ch!='#'){s2[j++]=ch;ch=s.a[s.top--];}s2[j++]='#';return s2;}void main(){int i=1,j=1;char c,*s1,*s2;s1=(char *)malloc(sizeof(char));printf("请输入中缀表达式\n");while((c=getchar())!='#'){s1[i++]=c;}s1[i]='#';printf("\n");s2=Change(s1);printf("转换后的中缀表达式\n");while(s2[j]!='#')printf("%c",s2[j++]);printf("\n");}
- 【中缀转换成后缀或者前缀的思想、过程以及算法实现】
- 一天一个算法: 前缀,中缀,后缀表达式的转换
- 中缀表达式转换为前缀后缀表达式的算法流程图
- 中缀表达式与前缀,后缀的转换
- 中缀、前缀、后缀表达式之间的转换
- 前缀---中缀--后缀 表达式的相互转换
- 前缀、中缀、后缀的相互转换
- 【后缀表达式的计算思想、过程以及算法实现】
- 前缀,中缀,后缀表达式转换
- 前缀、中缀、后缀表达式转换
- 前缀,中缀,后缀表达式转换
- 前缀表达式、中缀表达式、后缀表达式及转换实现
- python数据结构与算法 9 中缀后前缀、后缀的转换思路
- 前缀,中缀,后缀表达式的转换,表达式的求值
- 面试题77:前缀、中缀、后缀表达式的相互转换
- 中缀表达式转换为前缀后缀最简单的方法
- [整合]中缀表达式、前缀表达式、后缀表达式的相互转换
- 中缀表达式与前缀、后缀表达式的转换
- PHP "十二五" 简易 BLOG 代码- 未测试- 02
- 各种排序算法的总结和比较
- 遗传算法解决TSP问题
- 多线程对共享资源的访问
- Breadth-first traverse
- 【中缀转换成后缀或者前缀的思想、过程以及算法实现】
- PHP "十二五" 简易 BLOG 代码- 未测试- 03
- matplotlib绘制简单图
- PHP "十二五" 简易 BLOG 代码- 未测试- 04
- neo4j中索引的使用
- PHP "十二五" 简易 BLOG 代码- 未测试- 05
- js中的replace的使用方法
- VS debug下为什么多此一举jmp函数地址?
- TPROXY之殇-NAT设备加代理的恶果