栈应用之中缀和后缀
来源:互联网 发布:淘宝哪个店铺男装好 编辑:程序博客网 时间:2024/05/16 09:44
package com.dt.stactt.zhongturntohouzhui;import java.util.Stack;/** * 计算机实现转换: 将中缀表达式转换为后缀表达式的算法思想: ·开始扫描; ·数字时,加入后缀表达式; ·运算符: a. 若为最高级的运算符,入栈; b. 若为 '(',入栈; c. 若为 ')',则依次把栈中的的运算符加入后缀表达式中,直到出现'(',从栈中删除'(' ; d. 若为不是最高级的运算符,则将从栈顶到第一个优先级不大于(小于,低于或等于)它的运算符(或 '(',但优先满足前一个条件)之间的运算符加入后缀表达式中,该运算符再入栈; * @author kuwo * */public class MidleTurnToBehind {private String testString = null; private Stack<Character> stack = null; public MidleTurnToBehind(String str){ this.testString = str; stack = new Stack<Character>(); } private void anaysisStr(){ for (int i = 0; i < testString.length(); i++) { char c = testString.charAt(i); if (c == '+' || c == '-') { if (stack.isEmpty() || stack.peek() == '(') { stack.push(c); } else { while (!stack.isEmpty() && (stack.peek() == '*' || stack.peek() == '/' || stack.peek() == '+' || stack.peek() == '-')) { System.out.print(stack.pop()); } stack.push(c); } } else if (c == '*' || c == '/') { if (stack.isEmpty() || stack.peek() == '+' || stack.peek() == '-' || stack.peek() == '(') { stack.push(c); } else { while (!stack.isEmpty() && (stack.peek() == '/' || stack.peek() == '*')) { System.out.print(stack.pop()); } stack.push(c); } } else if (c == '(') { stack.push(c); } else if (c == ')') { char temp = ' '; while ((temp = stack.pop()) != '(') { System.out.print(temp); } } else { System.out.print(c); } } if (!stack.isEmpty()) { while (!stack.isEmpty()) { System.out.print(stack.pop()); } } } private void anaysis(){ for (int i = 0; i < testString.length(); i++) {char c = testString.charAt(i);if(c == '+' || c == '-'){if(stack.isEmpty() || stack.peek() == '('){//当栈是空的时候,运算符可以直接入栈stack.push(c);}else{//当栈不为空的时候,就把优先级不大于(包括等于)当前运算符的内容输出while (!stack.isEmpty() && (stack.peek() == '*'|| stack.peek() == '/' || stack.peek() == '+' || stack.peek() == '-')) {System.out.print(stack.pop());}//将此运算符之前的运算符出栈,之后当前运算符就要入栈。stack.push(c);}}else if(c == '*' || c == '/'){if(stack.isEmpty() || stack.peek() == '+' || stack.peek() == '-'){stack.push(c);}else {while((!stack.isEmpty() && (stack.peek() == '/' || stack.peek() == '*'))){System.out.print(stack.pop());}stack.push(c);}}else if(c == '('){// 'c'运算符是优先级最高的运算符,只要出现这个运算符就要入栈stack.push(c);}else if(c == ')'){//如果出现了')'运算符则要把'('运算符之后的所以的运算符出栈char temp;while ((temp = stack.peek()) != '(') {System.out.print(temp);}}else{//如果当前字符不是运算符,则直接输出System.out.print(c);}} if (!stack.isEmpty()) { while (!stack.isEmpty()) { System.out.print(stack.pop()); } } } public static void main(String[] args) { // MidleTurnToBehind testStacknew = new MidleTurnToBehind("A+B*(C-D)/E+F/H"); // MidleTurnToBehind testStacknew = new MidleTurnToBehind("a+b*c+(d*e+f)*g"); MidleTurnToBehind testStacknew = new MidleTurnToBehind("a-b-c"); // MidleTurnToBehind testStacknew = new MidleTurnToBehind("ac"); // testStacknew.anaysisStr(); testStacknew.anaysis(); } }
0 0
- 栈应用之中缀和后缀
- Stack应用之中缀->后缀
- 数据结构之线性表——中缀表达式和后缀表达式(栈的应用)
- 栈的基础应用之中缀转换后缀
- 数据结构:栈的应用之中缀转后缀C++
- 栈的重要应用之中缀转后缀表达式算法
- 栈的应用实践之中缀表达式转后缀表达式
- 栈的应用之中缀表达式转后缀表达式
- 栈的应用之中缀表达式转后缀
- 栈的应用之中缀表达式转换为后缀表达式
- 栈应用之中缀转后缀表达式(C语言版)
- 栈的应用--后缀表达式和中缀表达式的实现
- 算法之中缀表达式和后缀表达式
- 算法之中缀表达式和后缀表达式
- 栈的应用---中缀变后缀
- 栈的应用->中缀转后缀
- 栈应用——中缀转后缀+后缀计算
- 数据结构栈之中缀表达式转后缀
- jenkins安装
- 虚拟机运行原理
- 分支-04 出租车计价(15)
- session有效期
- 《大话设计模式》--如果再回到从前--备忘录模式<Memento>(18)
- 栈应用之中缀和后缀
- Android 命名规范 (提高代码可以读性)
- 多读 多看 多写文章 多写总结
- SPSS主成分分析
- 对分查找(二分查找)
- ViewPager 循环滚动
- nohup &
- eclipse集成jboss7.1
- IOS 简单的动画自定义方法(旋转、移动、闪烁等)