`

基于栈实现整数加法算法

阅读更多
package com.hongjindong.Stack;

public class calculate {

	private int MaxSize = 20;
	int[] AStack = new int[MaxSize];
	int top = -1;

	public void push(int Value) {//入栈

		if (top >= MaxSize) {
			System.out.println("The stack is full! ");

		} else {

			top++;
			AStack[top] = Value;

		}
	}

	public int pop() {//出栈
		int temp;

		if (top < 0) {
			System.out.println("The stack is empty!");
			return -1;
		}

		temp = AStack[top];
		top--;
		return temp;
	}

	public boolean IsOperator(int operator) {//判断是否是运算符

		if (operator == 43 || operator == 45 || operator == 42
				|| operator == 47)
			return true;
		else
			return false;

	}

	public int Priority(int operator) {//判断优先级
		if (operator == 43 || operator == 45)
			return 1;
		else if (operator == 42 || operator == 47)
			return 2;
		else
			return 0;
	}

	public int TwoResult(int operator, int operand1, int operand2) {//两个数的运算

		switch (operator) {
		case 43:
			return (operand2 + operand1);
		case 45:
			return (operand2 - operand1);
		case 42:
			return (operand2 * operand1);
		case 47:
			return (operand2 / operand1);//注意这里写表达式的顺序
		}
		return 0;
	}

	public static void main(String[] args) {

		calculate Operator = new calculate();
		calculate Operand = new calculate();
		String Expression = "8*9-2*4";
		int Position = 0;
		int Operator1;
		int Operand1 = 0;
		int Operand2 = 0;
		int Result = 0;

		while (true) {

			if (Operator.IsOperator((int) Expression.charAt(Position))) {//判断读入的是否是运算符

				if (Operator.top != -1) {//如果运算符栈还有符号,判断两者的优先级
					if (Operator.Priority((int) Expression.charAt(Position)) <= Operator
							.Priority(Operator.AStack[Operator.top])) {//栈类的运算符优先级大,先计算
						Operand1 = Operand.pop();
						Operand2 = Operand.pop();
						Operator1 = Operator.pop();

						Operand.push(Operand.TwoResult(Operator1, Operand1,
								Operand2));
					}
				}
				Operator.push((int) Expression.charAt(Position));//运算符进栈
			}

			else {
				Operand.push((int) Expression.charAt(Position) - 48);//整数进栈

			}

			Position++;
			if (Position >= Expression.length())
				break;
		}

		while (Operator.top != -1) {//出栈

			Operand1 = Operand.pop();
			Operand2 = Operand.pop();
			Operator1 = Operator.pop();

			Operand.push(Operand.TwoResult(Operator1, Operand1, Operand2));
		}
		Result = Operand.pop();
		System.out.println("The expression result is :" + Result);

	}
}
 
分享到:
评论

相关推荐

    Win32下无符号大整数相乘优化算法及其C++实现

    这些算法基于分治思想,将大整数分解为较小的部分,然后递归地进行乘法,其复杂度低于朴素的O(n^2)算法,达到O(n^(log2(3)))或O(n^(log3(2)))。虽然它们仍然涉及递归,但在适当的数据规模下,相比于朴素算法,它们...

    基于C语言的栈技术实现智能计算器1

    在本文中,我们将探讨如何基于C语言利用栈技术来实现一个智能计算器,它能处理包括加、减、乘、除、次方以及括号运算在内的各种数学运算。这个计算器还能智能地识别乘法符号,无论是"*"还是"x",并能处理浮点数和...

    逆波兰算法-java实现

    5. **ReverseCal.java** 文件可能是主程序,它包含了将中缀表达式转为逆波兰表达式的过程,以及基于栈的逆波兰表达式求值算法的实现。这个类可能有一个`calculate`方法,接收逆波兰表达式字符串作为输入,返回计算...

    数据结构实验报告-栈与队列-中缀表达式求值-实验内容及要求.docx

    算法设计中,堆栈的创建是通过动态内存分配实现的,出入栈操作通过修改栈顶指针(top)完成。数字字符转换为整数,可以通过减去字符'0'的ASCII码值(即48)来实现。在进行计算时,首先会在运算符堆栈中压入一个特殊...

    C语言堆栈计算器

    本项目是一个基于C语言实现的堆栈计算器,它可以处理包含括号在内的算式,并能检查并处理简单的计算错误。 首先,我们要理解堆栈的基本操作:压入(push)、弹出(pop)、查看顶部元素(peek)和检查堆栈是否为空...

    MFC实现24点算法,我的课程设计

    在本课程设计中,我们将探讨如何使用Microsoft Foundation Classes (MFC) 来实现经典的24点算法。MFC 是微软为Windows平台开发的一种C++类库,它为开发者提供了构建图形用户界面(GUI)和系统服务的应用框架。24点算...

    数据结构和算法源码_高精度 位运算 栈和堆

    高精度算法源码可能包括大整数的表示、加法、减法、乘法和除法等函数的实现。 接下来,我们讨论“位运算”。位运算是指在计算机中对二进制位进行的操作,如按位与(&),按位或(|),按位异或(^),左移()和右移(&gt;&gt;)等...

    C语言栈计算器.zip

    标题 "C语言栈计算器.zip" 暗示了一个使用C语言实现的计算器程序,它可能包含了一个基于栈数据结构的算法来执行基本的数学运算。栈是一种“后进先出”(LIFO)的数据结构,常用于处理括号表达式、算术运算等计算问题...

    基于vs2013 c语言实现逆波兰计算器

    本项目是基于Visual Studio 2013(VS2013)开发的一个C语言实现的逆波兰计算器,旨在提供一种基础的计算平台,支持基本的算术运算以及一些三角函数,同时也为用户提供了扩展功能的可能性。 首先,我们需要理解逆...

    常见算法代码(全).docx

    这篇文档名为“常见算法代码(全)”,是一个包含多种算法实现的Word文档,适用于ACM竞赛和C/C++编程。文档中的代码模板涵盖了基础的算法问题,如动态规划、图论、数学运算等,旨在帮助初学者理解和应用这些算法。 ...

    算法面试经典 100题

    ### 知识点总结 #### 1. 二叉查找树转变成排序的双向链表 ...2. **位运算**:通过位运算实现加法操作。 **实现细节**: - 使用数学公式`n * (n + 1) / 2`直接计算。 - 或者通过位运算实现递归式的加法操作。

    常用算法程序集(C语言描述)源代码.rar

    - 大整数运算:如大整数加法、乘法,用于处理超出常规整型范围的计算。 - 回文判断:检查一个数字或字符串是否正读反读都相同。 8. 数据结构: - 队列:先进先出(FIFO)的数据结构,如循环队列、链式队列。 - 栈...

    C语言24点算法源程序

    虽然提供的代码片段没有完整展示24点算法的具体实现,但基于上述数据结构和方法,可以通过递归或迭代的方式生成所有可能的运算组合,并检查结果是否等于24。这种方法通常涉及深度优先搜索或回溯算法。 综上所述,这...

    《妙趣横生的算法(C语言实现)》(杨峰 编著)

    《妙趣横生的算法(C语言实现)》可作为算法入门人员的教程,也可以作为学习过C语言程序设计的人士继续深造的理想读物,也可作为具有一定经验的程序设计人员巩固和提高编程水平,查阅相关算法实现和数据结构知识的参考...

    【史上最全】算法面试题集锦.pdf

    设计一个栈,要求能够实现O(1)时间复杂度的最小元素查询功能,需要使用辅助栈来存储当前栈的最小元素。当push新元素时,如果新元素小于等于当前最小元素,则将新元素同时压入辅助栈。当pop操作时,也将辅助栈的栈顶...

    数据结构课程设计图、树、字符串、递归算法

    此外,还有其他一些设计题目,如整数加法问题,要求用双向循环链表实现任意长整数的加法;交通咨询模拟,用有向图寻找最短路径;车厢调度问题,解决所有可能的车厢序列;以及字符串查找和替换,涉及字符串处理和文件...

    清华内部ACM培训资料_各类经典算法.zip_ACM_内部资料_清华_清华大学_算法

    2. Rabin-Karp算法:基于滚动哈希的字符串匹配。 3. BM和Boyer-Moore-Horspool算法:进一步优化的字符串匹配算法。 五、计算几何 1. 线段树:处理区间查询和修改问题,如区间加法、区间求和。 2. 平面向量:用于...

    加法计算器 加法计算器加法计算器加法计算器加法计算器

    - 运算逻辑:计算器内部的算法接收用户输入的数字,进行加法运算,并将结果返回到显示区域。这个过程涉及数值解析、错误处理和运算符优先级管理。 3. **实现方式**: - 基于事件驱动:计算器应用程序通常采用事件...

    数据结构与算法分析答案

    此外,还可以通过重复乘法或基于快速幂算法实现指数运算。 #### 三、数学预备知识 **2.1 数学基础知识** 这部分主要介绍了一些基本的数学概念和工具,这些对于理解和分析算法非常重要。例如,学生需要熟悉集合论...

Global site tag (gtag.js) - Google Analytics