算术中缀表达式转化成后缀表达式,并利用后缀表达式求值(操作数为个位数)

本文介绍了如何将算术中缀表达式转化为后缀表达式,以及如何利用后缀表达式进行计算。通过栈的数据结构实现,遵循特定的入栈规则,包括处理操作数、操作符、括号的情况。同时,文章讲解了使用后缀表达式求值的过程,主要涉及栈的操作和运算顺序。
摘要由CSDN通过智能技术生成

算术中缀表达式与后缀表达式

后缀表达式有利于计算机进行计算,中缀表达式有利于人们阅读与表达。

中缀表达式:a+b*c+(d*e+f)*g

对应的后缀表达式:abc*+de*f+g*+

将中缀表达式转化成后缀表达式

需要利用栈这种数据结构才能完成这一转化,在此用队列来存储后缀表达式:

中缀表达式的入栈规则:

1) 遇到操作数,直接输出到队列;

2)遇到操作符,输出到栈中,这个栈是一个操作符严格单调递增栈;(*,/ > +,-

3)遇到 '(' 左括号,直接输出到栈;

4)遇到 ')' 右括号,则将栈中的操作符都弹出到队列至'(' 左括号停止;

5)若读到中缀表达式末尾,将栈中所有操作符弹出至队列中;

	/**
	 * 将中缀表达式转化成后缀表达式并存储在队列中返回
	 * @param str
	 * @return 
	 */
	public static Queue<Character> infixToSuffix(String str) {
		Queue<Character> queue = new LinkedList<Character>();
		Stack<Character> stack = new Stack<>();//操作符优先级严格单调递增栈
		for(char c : str.toCharArray()) {
			if(c>='0' && c<='9') queue.offer(c);
			else if(c=='(') stack.push(c);
			else if(c==')') {
				char curOP=stack.pop();
				while(!stack.isEmpty() && curOP!='(') {
					queue.offer(curOP);
					curOP=stack.pop();
				}
			}
			else if(c>='*' && c<='/') {
				while(!stack.isEmpty() && stack.peek()!='(' && compare(c,stack.peek())=&#
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值