注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

古城风~~~

竹密无妨溪水过,天高不碍白云飞。这天下总有一份是属于我古城的天地!

 
 
 

日志

 
 

中缀表达式变后缀表达式  

2008-02-03 22:51:16|  分类: java/jsp |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;

class StackX{
 private int maxSize;
 private char[] stackArray;
 private int top;
 public StackX(int s)
 {
  maxSize=s;
  stackArray=new char[maxSize];
  top=-1;
 }
 public void push(char j)   //入栈
 {
  stackArray[++top]=j; 
 }
 public char pop()     //出栈
 {
  return stackArray[top--];
 }
 public char peek()    //查看
 {
  return stackArray[top];
 }
 public boolean isEmpty()   //检测是否为空
 {
  return (top==-1);
 }
 public int Size()        //检测大小
 {
  return top+1;
 }
 public char peekN(int n)       //查找
 {
  return stackArray[n];
 }
 public void diapalyStack(String s)    //栈的情况
 {
  System.out.print(s);
  System.out.print("Stack(botton-->top):");
  for(int j=0;j<Size();j++)
  {
   System.out.print(peekN(j)+"  ");
  }
  System.out.println();
 }
}
class InToPost{
 private StackX theStack;
 private String input;
 private String output="";
 public InToPost(String in)
 {
  input=in;
  int StackSize=input.length();
  theStack=new StackX(StackSize);
 }

 public String DoTrans()
 {
  for(int j=0;j<input.length();j++)
  {
   char ch=input.charAt(j);
   theStack.diapalyStack("For  "+ch+"  ");
   switch(ch)
   {
    case '+':
    case '-':
      gotOper(ch,1);     //调用方法 gotOper
      break;
    case '*':
    case '/':
      gotOper(ch,2);
      break;
    case '(':
      theStack.push(ch);
      break;
    case ')':
      gotParen(ch);
      break;
    default:
      output=output+ch;
      break;
   }
  }      //end for
  while(!theStack.isEmpty())
  {
   theStack.diapalyStack("While ");
   output=output+theStack.pop();
  }
  theStack.diapalyStack("End ");
  return output;
 }
 
 public void gotOper(char opThis,int prec1) 
 {
  while(!theStack.isEmpty())
  {
   char opTop=theStack.pop();
   if(opTop=='(')
   {
    theStack.push(opTop); break;
   }
   else
   {
    int prec2;
    if(opTop=='+'||opTop=='-')
     prec2=1;
    else
     prec2=2;
    if(prec2<prec1)
     {
     theStack.push(opTop); break;
     }
    else
     output=output+opTop;
   }
  }
  theStack.push(opThis);
 }
 public void gotParen(char ch)   //出栈
 {
  while(!theStack.isEmpty())
  {
   char chx=theStack.pop();
   if(chx=='(')
   {
    break;
   }
   else
    output=output+chx;
  }
 }
 
}
public class infixApp {               //A*(B-C)+E+(F-G/H)

 public static void main(String[] args) throws IOException {
  String input,output;
  while(true)
  {
   System.out.println("请输入表达式:");
   System.out.flush();
   input=getString();
   if(input.equals(""))
    break;
   InToPost theTrans=new InToPost(input);
   output=theTrans.DoTrans();
   System.out.println("输出的表达式是:"+output+'\n');
  }
 }


 private static String getString() throws IOException {
  InputStreamReader iso=new InputStreamReader(System.in);
  BufferedReader br=new BufferedReader(iso);
  String s=br.readLine();
  return s;
 }
 
}

  评论这张
 
阅读(598)| 评论(0)
推荐 转载

历史上的今天

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017