用栈实现表达式计算


</pre><p><span style="font-size:18px;"><span style="background-color: rgb(255, 255, 255);"><span style="color:#33CC00;"><em>这是第一次创建博客 ,我想把它当成 成长日记的存在  保存自己的代码  并且和别人分享</em></span></span></span></p><p><span style="font-size:18px;"><span style="background-color: rgb(255, 255, 255);"><span style="color:#33CC00;"><em>英语不好    见谅<img alt="哭" src="http://static.blog.youkuaiyun.com/xheditor/xheditor_emot/default/cry.gif" /></em></span></span></span></p><p><span style="font-size:18px;"><span style="background-color: rgb(255, 255, 255);"><span style="color:#33CC00;"><em>/*</em></span></span></span></p><p><span style="font-size:18px;"><span style="background-color: rgb(255, 255, 255);"><span style="color:#33CC00;"><em>*栈的后进先出,运算符的优先级,</em></span></span></span></p><p><span style="font-size:18px;"><span style="background-color: rgb(255, 255, 255);"><span style="color:#33CC00;"><em>*当运算符和栈中运算符比较 优先级小 ,字符出栈进行计算,否则字符入栈</em></span></span></span></p><p><span style="font-size:18px;"><span style="background-color: rgb(255, 255, 255);"><span style="color:#33CC00;"><em>*/</em></span></span></span></p><p><img alt="微笑" src="http://static.blog.youkuaiyun.com/xheditor/xheditor_emot/default/smile.gif" /><img alt="微笑" src="http://static.blog.youkuaiyun.com/xheditor/xheditor_emot/default/smile.gif" /></p><p></p><p><pre name="code" class="java">	IntStack is=new IntStack();
					charstack cs1=new charstack();
					BiaoDaShiJiSuan bdsjs=new 	BiaoDaShiJiSuan();
					cs1.ruzhan('#');
					System.out.print("请输入表达式以#作为结束标志");
					int temp=0,temp1=0;
					String str1="";
					//char c=sc.next().charAt(0);
					char[] p7=sc.next().toCharArray();
					while(p7[temp]!='#'||cs1.peek()!='#'){
						if(bdsjs.in(p7[temp])){
							str1+=p7[temp];
							temp++;
							temp1++;
						}else{
							if(temp1>0){
								System.out.println("入栈成功     数字栈入栈成功");
								is.ruzhan( new Integer(str1));//上面得出的数字字符串转换成字符后入栈
								System.out.println("     "+new Integer(str1));
								temp1=0;
								str1="";
							}
							switch(bdsjs.panduan(cs1.peek(),p7[temp])){
								case '<':
									cs1.ruzhan(p7[temp]);
									System.out.println("入栈成功     字符栈入栈成功");
									//c=sc.next().charAt(0);
									temp++;
								break;
								case '=':
									cs1.chuzhan();
									//c=sc.next().charAt(0);
									System.out.println("入栈成功     字符栈出栈成功");
									temp++;
									break;
									
								case'>':
									is.ruzhan(bdsjs.jisuan(is.chuzhan(), cs1.chuzhan(), is.chuzhan()));
									//c=sc.next().charAt(0);
									System.out.println("入栈成功      数字计算后入栈成功");
								
								break;
							}
							
							
						}
					}
					System.out.println("结果是"+is.chuzhan());



下面是判断优先级和是否是字符还有计算的方法

package stack;

public class BiaoDaShiJiSuan {
public boolean in(char i){
		if(i>='0'&&i<='9'){
			return true;
		}else{
		return false;
	}
		}
	
	//对传入的东东进行计算
	public int jisuan(int x,char f,int y){
		switch(f){
		case '+':
			return x+y;
		case '-':
			return x-y;
		case '*':
			return x*y;
			
		case '/':
			return x/y;
		}
		
		return 0;
	}
	//封装一个计算的优先符问题
	public char panduan(char x,char y){
		switch(x){
		case '+':
		case '-':
			if(y=='+'||y=='-'||y==')'||y=='#'){
				return '>';
			}
			if(y=='*'||y=='/'||y=='('){
				return '<';
			}
			break;
		case '*':
		case '/':
			if(y=='+'||y=='*'||y=='/'||y=='-'||y==')'||y=='#'){
				return '>';
			}
			if(y=='('){
				return '<';
			}
			break;
		case '(':
			if(y=='+'||y=='*'||y=='/'||y=='-'||y=='('){
			return '<';
			}
			if(y==')'){
				return'=';
			}
		case ')':
			if(y=='+'||y=='*'||y=='/'||y=='-'||y==')'||y=='#'){
			return '>';
			}
			
		case '#':
			if(y=='+'||y=='*'||y=='/'||y=='-'||y=='('){
				return '<';
			}
			if(y=='#'){
				return'=';
			}
			
		}
		
		return '<';
		
	}
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值