package org.lazyzhong.MyStack; import java.util.Stack; public class test1 { static Stack stack = new Stack(); static Stack stack1 = new Stack(); static String newstr=""; public static void main(String[] args) { String myimg="2*(1+3)-5*(1+2)"; System.out.println(toSuffixExpression(myimg)); System.out.println(doParse(toSuffixExpression(myimg))); } public static String toSuffixExpression(String mystr) { for(int i=0;i<mystr.length();i++){ char ch=mystr.charAt(i); switch(ch){ case '+': case '-': getOP(ch,1); break; case '*': case '/': getOP(ch,2); break; case '(': stack.push(ch); break; case ')': getParen(ch); break; default: newstr+=ch; break; } } while(!stack.isEmpty()){ newstr+=stack.pop(); } return newstr; } public static void getOP(char ch,int p){ while(!stack.isEmpty()){ char op=(char) stack.pop(); if(op=='('){ stack.push(op); break; }else{ int p2; if(op=='+' || op=='-') p2=1; else p2=2; if(p2<p){ stack.push(op); break; } else{ newstr+=op; } } } stack.push(ch); } public static void getParen(char ch){ while(!stack.isEmpty()){ char chx=(char) stack.pop(); if(chx=='(') break; else newstr+=chx; } } // 计算后缀表达式的值 public static int doParse(String mystr){ char ch; int num1,num2,result; for(int i=0;i<mystr.length();i++){ ch=mystr.charAt(i); if(ch>='0' && ch<='9') stack1.push((int)(ch-'0')); else{ num1=(int) stack1.pop(); num2=(int) stack1.pop(); switch(ch){ case '+':result=num1+num2;break; case '-':result=num2-num1;break; case '*':result=num1*num2;break; case '/':result=num1/num2;break; default:result=0; } stack1.push(result); } } result=(int) stack1.pop(); return result; } } /* * 转为后缀表达式: * (1)如果是(则直接入栈。。 * (2) 如果是)则将栈中的操作符依次加到输出中,直到遇到( * (3)不是括号的情况下,如果不是操作符,则直接将它加到输出中,如果是操作符则要进行比较。如果该操作符的优先级高于栈顶的操作符,则直接 * 将该操作符入栈,否则的话将栈中的操作符依次取出加到输出中,直到遇到比该操作符优先级低的,并且将该操作符加入栈中, * 如果扫描结束后栈中仍有操作符,则依次取出加到输出中。 * * */ /* * 后缀表达式计算 * 利用栈。。 * 只要遇到数字就入栈... * 当遇到操作的符的时候就从栈中取出两个数字来进行计算。。并将计算后的值入栈。。。 * 最后剩下的则是计算的值。。。 * */ /* * 这里只写的只适用于0-9.。。如果要适合多位数的数字,则只需简单的加个判断语句来讲多个数字当成一个数字。。 * */
相关推荐
### 自定义栈中缀表达式转换为后缀表达式并求值 #### 需求分析与背景 在计算机科学领域,将一个中缀表达式转换为后缀表达式是解决算术表达式求值问题的一种常用方法。通过这种方式可以避免括号带来的优先级问题,...
这里我们关注的是将中缀表达式转换为后缀表达式,也称为逆波兰表示法(Reverse Polish Notation, RPN)。这个过程是通过使用数据结构栈来完成的,对于理解和编写计算表达式的程序至关重要。下面我们将详细探讨这一...
中缀表达式转换为后缀表达式_C++程序设计 中缀表达式转换为后缀表达式是一个常见的数据结构和算法问题。中缀表达式是一种常见的数学表达式表示形式,例如:a \* (x + y) / (b - x),而后缀表达式是将运算符移到它的...
"中缀表达式转换为后缀表达式C++编程" 中缀表达式转换为后缀表达式是计算机科学中的一种重要技术,广泛应用于编译器、解释器和计算器等领域。中缀表达式是一种人类易读的数学表达式形式,而后缀表达式是一种计算机...
将中缀表达式转换为后缀表达式的主要思路如下: 1. **初始化**:创建两个字符串变量,`s1` 用于存储中缀表达式,`s2` 用于存储最终的后缀表达式。 2. **遍历**:从左到右逐个字符扫描中缀表达式中的每个字符。 3. *...
将中缀表达式转换为后缀表达式并计算 本文档主要讨论如何将中缀表达式转换为后缀表达式,并计算表达式的值。通过使用栈的操作,实现了中缀表达式到后缀表达式的转换,并计算表达式的值。 一、需求分析 在该实验中...
中缀表达式转换为后缀表达式是一种常见的算法,用于将中缀表达式转换为后缀表达式,以便于计算机更好地理解和执行。下面将详细介绍这种算法的步骤和原理。 算法步骤 1. 分配两个栈,S1 和 S2。S1 用于临时存储...
C++栈实现将中缀表达式转换为后缀表达式 知识点1:中缀表达式和后缀表达式 中缀表达式是一种常见的数学表达式形式,其中运算符位于操作数之间,如a+b*c。后缀表达式则是将运算符移到操作数后面的形式,如ab*c+。...
通过这个C++程序,我们可以将中缀表达式“2 + 3 * 4”转换为后缀表达式“2 3 4 * +”,并以这种方式有效地进行计算。这种方法在编译器和解释器的设计中具有广泛的应用,因为它提供了一种高效且易于理解的方式来解析...
1. 用户输入中缀表达式,程序将其转换为后缀表达式并输出。 2. 利用后缀表达式计算表达式的值并输出结果。 3. 检查输入的中缀表达式是否合法。 实验内容主要包括以下几个模块: 1. 构建链栈:链栈是一种线性结构,...
"中缀表达式转换为后缀表达式的C++实现" 本文主要讨论中缀表达式转换为后缀表达式的C++实现,涵盖设计思想、实验要求、实验环境、主要数据类型、主函数流程图、分析函数流程图、Exchange函数流程图、Add函数流程图...
3. **中缀表达式转换为后缀表达式**: 中缀表达式是我们通常看到的数学表达式形式,如"2 + 3 * 4"。转换过程需要用到两个栈:一个运算符栈和一个临时结果栈。遍历表达式,遇到数字直接输出,遇到运算符时,若其...
2. **后缀表达式**(也称为逆波兰表示法):在这种表示法中,操作符紧跟在其操作数之后,例如,上述中缀表达式转换成后缀表达式为 `2 3 4 * +`。这种表示法简化了计算过程,因为不需要括号来明确优先级,而是通过...
将中缀表达式转换为后缀表达式.c
用户输入中缀表达式,程序输出后缀表达式并输出计算结果
中缀表达式转换为后缀表达式,也称为逆波兰表示法(Reverse Polish Notation, RPN),是解决数学计算问题的一种有效方法。在中缀表达式中,运算符位于其操作数之间,如 `a + b`,而在后缀表达式中,运算符位于其操作...
这个文档“数据结构-3期(KC002)中缀表达式转换为后缀表达式.docx”主要探讨了如何将常见的数学中缀表达式转换为后缀表达式,也称为逆波兰表示法。这种转换对于计算和解析表达式非常有用,因为它消除了括号的需求,...
在这个程序中,还实现了前缀表达式转换为后缀表达式,前缀表达式与中缀表达式类似,只是运算符位于操作数之前,如 `+ 2 3`。转换过程与中缀转后缀类似,只是在比较运算符优先级时需反向处理。 此外,程序支持了加、...
本文件主要讨论的是一个具体的数据结构问题,即如何将中缀表达式转换为后缀表达式,这是编译原理中的一个经典议题。中缀表达式是我们日常生活中常见的运算表达方式,如5+6*8,而后缀表达式,又称逆波兰表示法,是...