实验一(一)简单计算器项目准备

目录

一. 简单计算器介绍

二. 开发工具

三. 实现原理

1.栈

2.List

三. 表达式

1.运算符优先级

2.中缀表达式

3.后缀表达式

算法作用:

4.中缀表达式转化为后缀表达式

5.后缀表达式的计算

方法二:双栈算符优先级法

方法三:二叉树

​ 

 四. 参考资料



一. 简单计算器介绍

     简单计算器就是可以实现带括号的加减乘除四则运算并且查询历史记录的计算器

二. 开发工具

     编程语言:Java

     开发工具:IDEA

     图形界面工具:Java swing

三. 实现原理

       在输入合法的表达式后,将其转化为中缀表达式List,再将中缀表达式List转化为后缀表达式,最后再对后缀表达式进行计算得到所需的结果。

1.栈

    当我们在对后缀表达式进行计算的时候我们需要用到栈。

基本释义:

       栈(stack)又名堆栈,它是一种运算受限的线性表。限定仅在表尾进行插入和删除操作的线性表。这一端被称为栈顶,相对地,把另一端称为栈底。向一个栈插入新元素又称作进栈、入栈或压栈,它是把新元素放到栈顶元素的上面,使之成为新的栈顶元素;从一个栈删除元素又称作出栈或退栈,它是把栈顶元素删除掉,使其相邻的元素成为新的栈顶元素。

特征:数据先进后出。

创建方法:

Stack<> stack =new Stack<>();

算法实现:

(1)进栈(PUSH)算法
  ①若TOP≥n时,则给出溢出信息,作出错处理(进栈前首先检查栈是否已满,满则溢出;不满则作②);
  ②置TOP=TOP+1(栈指针加1,指向进栈地址);
  ③S(TOP)=X,结束(X为新进栈的元素);
  (2)退栈(POP)算法
  ①若TOP≤0,则给出下溢信息,作出错处理(退栈前先检查是否已为空栈, 空则下溢;不空则作②);
  ②X=S(TOP),(退栈后的元素赋给X):
  ③TOP=TOP-1,结束(栈指针减1,指向栈顶)。
 

2.List

基本释义:

       List类似于数组,不同的是List的长度可以不需要在定义的时候说明,存储空间不是像数组那样固定的,List的长度可以进行延伸和收缩。

使用方法:List (Java Platform SE 8 )

三. 表达式

       在进行计算表达式的时候,如果运算符个数大于一个或者带有括号的时候我们便需要对运算符的优先级进行比较,但是计算机无法像我们一样可以对中缀表达式来判断运算符的优先级,所以我们需要将其转换为后缀表达式来计算。

1.运算符优先级

2.中缀表达式

       中缀表达式(或中缀记法)是一个通用的算术或逻辑公式表示方法, 操作符是以中缀形式处于操作数的中间(例:3 + 4),中缀表达式是人们常用的算术表示方法。

与前缀表达式(例:+ 3 4)或后缀表达式(例:3 4 +)相比,中缀表达式不容易被计算机解析,但仍被许多程序语言使用,因为它符合人们的普遍用法。

与前缀或后缀记法不同的是,中缀记法中括号是必需的。计算过程中必须用括号将操作符和对应的操作数括起来,用于指示运算的次序。

3.后缀表达式

逆波兰式(Reverse Polish notation,RPN,或逆波兰记法),也叫后缀表达式(将运算符写在操作数之后)。

一个表达式E的后缀形式可以如下定义:

(1)如果E是一个变量或常量,则E的后缀式是E本身。

(2)如果E是E1 op E2形式的表达式,这里op是任何二元操作符,则E的后缀式为E1'E2' op,这里E1'和E2'分别为E1和E2的后缀式。

(3)如果E是(E1)形式的表达式,则E1的后缀式就是E的后缀式。

如:我们平时写a+b,这是中缀表达式,写成后缀表达式就是:ab+

(a+b)*c-(a+b)/e的后缀表达式为:

(a+b)*c-(a+b)/e

→((a+b)*c)((a+b)/e)-

→((a+b)c*)((a+b)e/)-

→(ab+c*)(ab+e/)-

→ab+c*ab+e/-

算法作用:

        实现逆波兰式的算法,难度并不大,但为什么要将看似简单的中缀表达式转换为复杂的逆波兰式?原因就在于这个简单是相对人类的思维结构来说的,对计算机而言中序表达式是非常复杂的结构。相对的,逆波兰式在计算机看来却是比较简单易懂的结构。因为计算机普遍采用的内存结构是栈式结构,它执行先进后出的顺序。

4.中缀表达式转化为后缀表达式

5.后缀表达式的计算

需要使用一个栈stack来进行值得计算。

从左到右依次扫描整个后缀表达式,如果扫描到的是操作数,那么便将操作数进行压栈的操作。

如果扫描到的是操作符,那么便将stack栈顶的前两个元素进行出栈的操作,需要注意的是,如果扫描到的操作符是除号,那么先出栈的元素是被除数,后出栈的元素是除数;同理,如果扫描到是操作符是减号,那么先出栈的元素是被减数,后出栈的元素是减数。扫描完整个后缀表达式后,最后栈中剩下的一个元素便是所需计算的结果。

方法二:双栈算符优先级法

方法三:二叉树

 四. 参考资料

中缀表达式:中缀表达式_百度百科

后缀表达式:

逆波兰式_百度百科

栈:

栈(计算机术语)_百度百科

中缀表达式转化为后缀表达式、双栈算符优先级法、二叉树:

课程ppt 计算机软件技术实习技术提示 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值