java实现中缀表达式转后缀表达式并且计算

自己写一个栈 用数组实现

package cn.itcast.StackAndQuen;

import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;

/**
 * Created by likailong on 2016/10/16.
 * 中缀表达式到后缀表达式
 */
public class MathCaculate {
    public static void main(String [] args){
         Scanner san=new Scanner(System.in);//键盘读入
         List list=new ArrayList<>();//将中缀表达式变成后缀表达式用数组存储
         String input = san.next();//得到输入的信息
         char[] shuju = input.toCharArray();//输入的所有信息放入char数组里
        int priority=0;//标记符号的的优先级
         MyStackmystack=new MyStack<>();//符号优先级栈
         MyStackcaculatestack=new MyStack<>();//计算后缀表达式栈
         for(int i=0;i=priority){//如果得到的是个运算符 与栈顶优先级比较
                     priority=getPriority(shuju[i]);//如果大于等于栈顶优先级 入栈 反之出栈
                      mystack.push(shuju[i]);
                 }
                 else{
                      while (!mystack.isEmpty()){//出栈操作
                          char num=mystack.pop();
                          list.add(num);
                          System.out.print(num);
                      }
                     mystack.push(shuju[i]);
                 }
             }else{
                 System.out.print(shuju[i]);//如果是数字直接输出 用数组接收
                 list.add(shuju[i]);
             }
         }
        char num1=mystack.pop();//得到栈中最后一个符号 输出
        System.out.print(num1);
        list.add(num1);//存入数组
        System.out.println();
        for(int i=0;i

package cn.itcast.StackAndQuen;

/**
 * Created by likailong on 2016/10/6.
 * 自定义栈的存储结构  用数组实现比较简单
 */
public class MyStack {
    private T arr[];
    private int top;
    public MyStack(){
        top=-1;
        arr=(T[])new Object[10];//建立栈的大小 默认
    }
    public MyStack(int maxSize){//构造方法的重载 建立指定的栈的大小
        top=-1;//因为栈操作在操作顶层 先进后出 指针初始为-1
        arr=(T[])new Object[maxSize];
    }
    public void push(T value){
        arr[++top]=value;
    }//入栈操作  指针下移动
    public T pop(){return arr[top--];//top指针上移动  及就是pop推出元素并且删除
    }
    public  T peek(){
        return  arr[top];
    }//查询某个元素
    public boolean isEmpty(){
        return top==-1;
    }//判断栈是否为空 判断top指针是否改变就可
    public boolean isFool(){
        return top==arr.length-1;
    }//判断栈是否满 及就是top指针是否是栈的长度-1 因为数组从0开始

}

你可能感兴趣的:(java算法,java基础,java数据结构)