`
radovi
  • 浏览: 64638 次
  • 性别: Icon_minigender_1
  • 来自: 杭 州
社区版块
存档分类
最新评论

算术表达式求值演示——严蔚敏版数据结构实习题1

阅读更多
该算法目前还只能计算个位数的四则运算,
如 5-9+8*7/1
二25+9*8/74则不能计算
改进中……

Stack.calss
/**
 * ***********CopyRight**************
 *-------Powered by QianXunNet-----
 *-----Version 1.00   2009-01-17-----
 *-----   Design BY  NiChao    -----
 *^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 
 */
package yanweimin.StackOpertor;

public class Stack {
	
	     /*
	      *   将数据num存入栈
	      * @param num 带存入的数据或运算符
	      */
			public void push(int num)
			{
				if(this.p == maxsize)
					System.out.println("栈已满");
				else
				{
					this.p++;
					this.stackvalue[p] = num;
				}
			}
			
			/*
			 * 从栈中取出一个数据或运算符
			 * @return temp   取出的值
			 */
			public int pop()
			{
				int temp = -1;
				        //栈已经空
				if(this.p != -1)
				{
					temp =  this.stackvalue[p];
					this.p--;
				}
				return temp;
			}
			
			/*
			 *  检验是否是运算符
			 *  @param num 待检验的字符
			 *  @ true/false
			 */
			public boolean isOperator(int num)
			{
				if(num == 42 || num == 43 || num ==45 || num ==47)
					return true;
				else 
					return false;
			}
			/*
			 *  对两个数进行计算
			 * @param a  b   两个操作数
			 * @param operator 运算符]
			 * @return jieguo 运算结果
			 */
		   public int twoJieGuo(int a, int operator, int b)
		   {
			   switch(operator)
			   {
			   case 42 : return (a * b);
			   case 43 : return (a + b);
			   case 45 : return (a -b);
			   case 47 : return (a/b);
			   }
			   return 0;
		   }
		   /*
		    * 判断运算符的优先顺序
		    * @ param  operator 带判断的运算符
		    * @ return youxianma
 		    */
		   public int youxianMa(int operator)
		   {
			   switch(operator)
			   {
			   case 42: return 2;
			   case 47: return 2;
			   case 43: return 1;
			   case 45: return 1;
			   }
			   return 0;
		   }
	
	     //栈的最大容量
 int maxsize =20;
        //栈数组
    int[] stackvalue =  new int[maxsize];
       // 栈内的指针  孔栈的时候为-1
 int p = -1;
}



YunSuanFu.java
/**
 * ***********CopyRight**************
 *-------Powered by QianXunNet-----
 *-----Version 1.00   2009-01-17-----
 *-----   Design BY  NiChao    -----
 *^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 
 */

package yanweimin.StackOpertor;

import yanweimin.StackOpertor.Stack;
import java.util.Scanner;
public class YunSuanFu {

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		// TODO Auto-generated method stub
                      //定义变量
		Stack yunsuanfu = new Stack();       //运算符栈
		Stack shu = new Stack();                 //操作数栈
		 String ex = "";   //带运算的表达式
		 int zhizhen =0;       //字符串上指示的指针
		 int operator = 0;   //操作符
		 int operated1=0,operated2 = 0;   //操作数
		 
		 Scanner cin = new Scanner(System.in);
		 System.out.println("input a biaodashi:");
		 ex = cin.nextLine();
		 		while(true)
		 		{
		 			//判断是否为运算符
		 			if(yunsuanfu.isOperator(  (int) ex.charAt(zhizhen) ) )
		 			{
		 				         //需要进行运算符的比较
		 				if(yunsuanfu.p != -1)
		 				{
		 					               //先运算栈内的
		 					if(yunsuanfu.youxianMa( (int) ex.charAt(zhizhen) ) <= yunsuanfu.youxianMa((int) yunsuanfu.stackvalue[yunsuanfu.p] ))
		 							{
		 						         operated1 = shu.pop();
		 						         operated2 = shu.pop();
		 						         operator = yunsuanfu.pop();
		 						        shu.push(  shu.twoJieGuo(operated2, operator,operated1)  );
		 							}
		 				}
		 				yunsuanfu.push((int)  ex.charAt(zhizhen) );
		 					
		 			}
		 			          //为运算数时
		 			else
		 			{                   
		 				 shu.push((int) (ex.charAt(zhizhen)-48));		 					 
		 			}
		 			zhizhen++;
		 			if(zhizhen >=ex.length())
		 				 break;
		 		}
		 		  //将剩余运算
		 			while(yunsuanfu.p != -1)
		 			{
		 				operated1 = shu.pop();
		 				operated2 = shu.pop();
		 				operator = yunsuanfu.pop();
		 				shu.push( shu.twoJieGuo(operated2,operator,operated1));
		 			}
		 			//取出表达式的最终结果
		 			
		 			int last = shu.pop();
		 			System.out.print("你输入的表达式:"+ex+"=");
		 			System.out.println(last);
		
	}

}

分享到:
评论

相关推荐

    【数据结构】算术表达式求值演示

    本文将深入探讨一个特定的主题——"算术表达式求值",这是数据结构应用的一个实例,主要涉及编译原理、解析器设计以及C++编程语言。 算术表达式求值是指对包含加、减、乘、除等运算符的数学表达式的计算过程。在...

    数据结构实习报告:算术表达式求值演示

    《数据结构实习报告:算术表达式求值演示》 在数据结构的学习中,实现算术表达式的求值是一项基础而重要的任务。本实习报告主要围绕这个主题展开,旨在通过编程实现一个能够处理算术表达式的系统,该系统能够接收...

    算术表达式求值演示1

    本文将深入探讨算术表达式求值的原理、方法以及相关的编程实践,以"算术表达式求值演示1"为例,解析其中涉及到的知识点。 首先,算术表达式求值是计算科学中的基本概念,它涉及到加法、减法、乘法、除法等运算,...

    算术表达式求值演示

    数据结构实践里面的作业,算术表达式求值演示,很不错的代码,附加较详细的注释

    数据结构算术表达式求值实验报告

    《数据结构算术表达式求值》实验报告主要探讨了如何使用数据结构来解决算术表达式的求值问题。在计算机科学中,算术表达式的处理是一个基础且关键的问题,尤其是在编译器设计和解释器实现中。本实验报告旨在通过具体...

    算术表达式求值演示程序课程设计

    在本课程设计中,主题是“算术表达式求值演示程序”,这涉及到计算机科学中的一个核心概念,即计算表达式的解析与求值。这个程序的设计目标是处理算术表达式,通过数据结构来实现对表达式的正确评估。具体来说,它会...

    数据结构C语言版算术表达式求值

    采用栈的数据结构编写算术表达式求值,定义了字符栈和数据栈

    实验三 算术表达式求值演示

    通过这种方式,我们可以实现一个简单的算术表达式求值器,它使用了栈数据结构和算符优先级的概念,有效地处理了表达式的计算过程。这种方法对于解析和计算复杂的数学表达式非常有用,特别是在编译器设计和解析算法的...

    算术表达式求值演示2

    《算术表达式求值演示2》项目是一个典型的C或C++编程实践,主要目标是设计并实现一个程序,能够解析和计算用户输入的算术表达式。该项目可以帮助学习者深入理解编译原理中的词法分析、语法分析以及表达式求值等核心...

    算术表达式求值(数据结构课设)

    数据结构的算术表达式求值,能计算正实数的基本运算,并有相应的纠错功能

    算术表达式求值演示课程设计

    在本课程设计中,主题为“算术表达式求值演示”,主要涵盖了计算机科学中的一个重要概念——如何解析和计算算术表达式。算术表达式是编程语言的基础,包括加、减、乘、除等基本运算,以及括号用于定义运算的优先级。...

    数据结构——算术表达式求值

    算术表达式求值(用到堆栈,没用模版) 程序运用运算符栈、运算数栈以及优先级阵列等算法实现:对输入的算术表达式求值后输出。主程序结构简单,算法各函数功能明确。考虑到程序模版操作给程序可读性带来障碍,所以...

    栈的应用----算术表达式求值程序

    栈的应用广泛,其中之一就是用于解决算术表达式的求值问题。本文将深入探讨如何利用栈来实现一个算术表达式求值的程序。 首先,我们要理解算术表达式的构成。一个基本的算术表达式可能包含数字、运算符(如加号"+...

    算术表达式求值演示-课程设计报告

    《算术表达式求值演示-课程设计报告》 该课程设计报告主要涉及的是计算机科学中的一个重要概念——算术表达式求值。算术表达式计算是编程语言的基础,而算符优先法则是解决此类问题的常用方法。在这个设计中,学生...

    数据结构课程设计——算术表达式求值

    "数据结构课程设计——算术表达式求值" 本课程设计旨在设计一个算术表达式求值程序,使用算符优先法对算术四则混合运算表达式进行求值。该程序可以从终端输入语法正确的、不含变量的整数表达式,并使用两个工作栈来...

    数据结构实验-算术表达式求值

    ### 数据结构实验——算术表达式求值 #### 实验目的 本次实验旨在实现一个能够对包含浮点数的算术表达式进行求值的程序。通过本实验,学生能够进一步掌握栈的基本操作及其在实际问题中的应用,并理解并实现中缀...

    数据结构报告——算术表达式求值演示

    这份"数据结构报告——算术表达式求值演示"是关于如何利用C++编程语言来实现对算术表达式的求值,这通常涉及到解析、处理和计算涉及运算符和操作数的字符串表达式。 在C++中,类封装是一种重要的面向对象编程原则,...

Global site tag (gtag.js) - Google Analytics