>>分享Java编程技术,对《Java面向对象编程》等书籍提供技术支持 书籍支持  卫琴直播  品书摘要  在线测试  资源下载  联系我们
发表一个新主题 开启一个新投票 回复文章 您是本文章第 29035 个阅读者 刷新本主题
 * 贴子主题:  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面向对象编程-->Java常用类(上)
  JavaWeb开发-->Web运作原理(Ⅲ)
  JSP与Hibernate开发-->数据库事务的并发问题的解决方案
  Java网络编程-->用Axis发布Web服务
  精通Spring-->虚拟DOM和render()函数
  Vue3开发-->Vue指令
  10道Java编程基础练习题
  TCP、UDP及Socket代码示例
  java.util.logging.Logger使用详解
  Java是如何实现自己的SPI机制的?
  面试官刁难:Java字符串可以引用传递吗?
  java万年历简单制作
  volatile 与 synchronized 详解
  JAVA常用数据结构
  Eclipse使用指南:Debug 配置
  常用的正则表达式汇总
  java比c++强大之处JVM垃圾收集算法
  Java入门实用代码:获取本机IP地址及主机名
  Java入门实用代码: List 列表中元素的替换
  正则表达式【匹配非字母和数字】
  native2ascii.exe 的Java实现类
  更多...
 IPIP: 已设置保密
楼主      
1页 0条记录 当前第1
发表一个新主题 开启一个新投票 回复文章


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