>>分享Java编程技术,对《Java面向对象编程》等书籍提供技术支持 书籍支持  卫琴直播  品书摘要  在线测试  资源下载  联系我们
发表一个新主题 开启一个新投票 回复文章 您是本文章第 28122 个阅读者 刷新本主题
 * 贴子主题:  Java入门实用代码:利用堆栈将中缀表达式转换成后缀表达式 回复文章 点赞(0)  收藏  
作者:flybird    发表时间:2020-01-21 13:21:25     消息  查看  搜索  好友  邮件  复制  引用

  

Java 实例 - 利用堆栈将中缀表达式转换成后缀表达式

以下实例演示了如何使用堆栈进行表达式的堆栈将中缀(Infix)表达式转换成后缀(postfix)表达式:                      

InToPost.java 文件

import   java . io . IOException ;

public   class   InToPost   {
    private   Stack   theStack ;
    private   String   input ;
    private   String   output  =  " " ;
    public   InToPost ( String   in )   {
       input  =  in ;
       int   stackSize  =  input . length ( ) ;
       theStack  =  new   Stack ( stackSize ) ;
    }
    public   String   doTrans ( )   {
       for   ( int   j  =  0 ;  j  <  input . length ( ) ;  j ++ )   {
          char   ch  =  input . charAt ( j ) ;
          switch   ( ch )   {
             case   ' + ' :
             case   ' - ' :
             gotOper ( ch ,  1 ) ;
             break ;
             case   ' * ' :
             case   ' / ' :
             gotOper ( ch ,  2 ) ;
             break ;
             case   ' ( ' :
             theStack . push ( ch ) ;
             break ;
             case   ' ) ' :
             gotParen ( ch ) ;
             break ;
             default :
             output  =  output  +  ch ;
             break ;
          }
       }
       while   ( ! theStack . isEmpty ( ) )   {
          output  =  output  +  theStack . pop ( ) ;
       }
       System . out . println ( output ) ;
       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   static   void   main ( String [ ]   args )  
    throws   IOException   {
       String   input  =  " 1+2*4/5-7+3/6 " ;
       String   output ;
       InToPost   theTrans  =  new   InToPost ( input ) ;
       output  =  theTrans . doTrans ( ) ;
       System . out . println ( " Postfix is  "  +  output  +  '
' ) ;
    }
    class   Stack   {
       private   int   maxSize ;
       private   char [ ]   stackArray ;
       private   int   top ;
       public   Stack ( int   max )   {
          maxSize  =  max ;
          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 ) ;
      }
    }
}

以上代码运行输出结果为:

124*5/+7-36/+

Postfix is 124*5/+7-36/+



程序猿的技术大观园:www.javathinker.net



[这个贴子最后由 flybird 在 2020-01-27 16:40:52 重新编辑]
  Java面向对象编程-->图形用户界面(下)
  JavaWeb开发-->Servlet技术详解(Ⅰ)
  JSP与Hibernate开发-->持久化层的映射类型
  Java网络编程-->Java网络编程入门
  精通Spring-->绑定表单
  Vue3开发-->创建综合购物网站应用
  Java虚拟机安全性-class文件检验器
  Java集合框架学习---深入探究ArrayList源码
  Java虚拟机(JVM)参数配置说明
  JDK自带JVM调优工具的用法
  用注解去代替if-else的技巧
  购书咨询
  NoClassDefFoundError和ClassNotFoundException的区别
  Synchronized与ReentrantLock区别总结
  Eclipse使用指南:快速修复功能
  正则表达式:运算符优先级
  Java设计模式:装饰器模式
  Java入门实用代码: 集合中添加元素
  Java入门实用代码:数组转集合
  Java入门实用代码:获取数组长度
  Eclipse中怎么一键去除java项目中的信息打印语句
  更多...
 IPIP: 已设置保密
楼主      
1页 0条记录 当前第1
发表一个新主题 开启一个新投票 回复文章


中文版权所有: JavaThinker技术网站 Copyright 2016-2026 沪ICP备16029593号-2
荟萃Java程序员智慧的结晶,分享交流Java前沿技术。  联系我们
如有技术文章涉及侵权,请与本站管理员联系。