Java 数据结构和算法 计算表达式问题

上一节介绍了栈和队列两种数据结构,这里接介绍一个栈和队列的综合应用:计算表达式

计算表达式

以前做小练习的时候也做过小的计算器,对表达式的计算是很重要也是很头疼的一部分,这里就来看看如何使用栈和队列来实现。
计算表达式分两步:

  • 将算术表达式转换为后缀表达式。
  • 计算后缀表达式的值。
中缀表达式 后缀表达式
A+B-C AB+C-
A*B/C AB*C/
A+B*C ABC*+
A*(B+C) ABC+*
A*B+C*D AB*CD*+
A+B*(C-D/(E+F)) ABCDEF+/-*+

举例一个计算过程:

这里写图片描述

中缀表达式转换为后缀表达式的转换规则:

中缀表达式读取的字符 动作
操作数 写至输出
左括号 压入栈
右括号 栈非空时重复一下步骤:弹出一项,若项不为(,则写至输出,若为(退出循环

代码实现:


import java.io.*;          

class StackX
   {
   private int maxSize;
   private char[] stackArray;
   private int top;

   public StackX(int s)       // constructor
      {
      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 displayStack(String s)
      {
      System.out.print(s);
      System.out.print("Stack (bottom-->top): ");
      for(int j=0; j<si
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值