当前位置: 首页 > news >正文

怎么做老虎机网站的宁波seo网络推广产品服务

怎么做老虎机网站的,宁波seo网络推广产品服务,武汉网站策划公司,济南制作网站企业文章目录前言一、功能要求二、思路分析三、中缀表达式转后缀表达式四、计算过程五、时间复杂度六、代码实现1.测试代码2.代码分析总结前言 逆波兰计算器是用逆波兰表达式实现的一个计算器,逆波兰表达式又叫后缀表达式,我们使用该计算器时输入的是中缀表…

文章目录

  • 前言
  • 一、功能要求
  • 二、思路分析
  • 三、中缀表达式转后缀表达式
  • 四、计算过程
  • 五、时间复杂度
  • 六、代码实现
    • 1.测试代码
    • 2.代码分析
  • 总结

前言

逆波兰计算器是用逆波兰表达式实现的一个计算器,逆波兰表达式又叫后缀表达式,我们使用该计算器时输入的是中缀表达式,然后计算器会把中缀表达式转成后缀表达式,这样更有利于计算器的运算,计算器使用的数据结构是栈。

一、功能要求

写一个控制台计算器,能够进行简单的加减乘除运算,支持小括号,要求使用逆波兰表达式实现。

二、思路分析

首先我们把输入的中缀表达式字符串存入list集合,操作集合中的元素比直接操作字符串更方便,然后我们再把中缀表达式的集合形式转成后缀表达式的集合形式,接下来就可以调用我们的计算函数进行计算。

三、中缀表达式转后缀表达式

在这里插入图片描述

中缀表达式转后缀表达式的核心思想也是借助了一个栈来进行操作,大家可以仔细看图中转的过程,并结合代码深入理解。

四、计算过程

在这里插入图片描述

计算过程并不复杂,相信大家学会了转后缀表达式后就能很轻易的实现该操作。

五、时间复杂度

逆波兰计算器的时间复杂度应该为O(n)

六、代码实现

1.测试代码

代码如下:

package com.yc.stack;import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;
import java.util.Stack;public class PolandNotation {public static void main(String[] args) {Scanner sc = new Scanner(System.in);boolean flag = true;while(flag){System.out.println("请输入表达式:");//1+((2+3)*4)-5String expression = sc.next();//中缀表达式字符串转为list集合形式List<String> infixExprssion = toInfixExpressionList(expression);//中缀表达式转后缀表达式List<String> sufixExpression = parseSufixExpressionList(infixExprssion);//调用计算函数求解int res = calculate(sufixExpression);System.out.println(res);}sc.close();}/*** 中缀表达式字符串转集合形式* @param infixExprssion 中缀表达式字符串* @return*/private static List<String> parseSufixExpressionList(List<String> infixExprssion) {Stack<String> stack = new Stack<String>();List<String> list = new ArrayList<String>();for(String item:infixExprssion){if(item.matches("\\d+")){list.add(item);}else if(item.equals("(")){stack.push(item);}else if(item.equals(")")){while(!stack.peek().equals("(")){list.add(stack.pop());}stack.pop();}else{while(!stack.isEmpty()&&Operation.priority(stack.peek())>=Operation.priority(item)){list.add(stack.pop());}stack.push(item);}}while(!stack.isEmpty()){list.add(stack.pop());}return list;}/*** 中缀表达式转后缀表达式* @param expression 中缀表达式集合形式* @return*/private static List<String> toInfixExpressionList(String expression) {List<String> list = new ArrayList<String>();int index = 0;String str;do{if(expression.charAt(index)<48||expression.charAt(index)>57){list.add(expression.charAt(index)+"");index++;}else{str = "";while(index<expression.length()&&(expression.charAt(index)>=48&&expression.charAt(index)<=57)){str += expression.charAt(index);index++;}list.add(str);}}while(index<expression.length());return list;}/*** 计算求解* @param list 后缀表达式* @return*/private static int calculate(List<String> list) {Stack<String> stack = new Stack<String>();for(String item:list){if(item.matches("\\d+")){stack.push(item);}else{int res = 0;int num2 = Integer.parseInt(stack.pop());int num1 = Integer.parseInt(stack.pop());if(item.equals("*")){res = num1*num2;stack.push(""+res);}else if(item.equals("/")){res = num1/num2;stack.push(""+res);}else if(item.equals("+")){res = num1+num2;stack.push(""+res);}else if(item.equals("-")){res = num1-num2;stack.push(""+res);}else{throw new RuntimeException("运算符有误");}}}return Integer.parseInt(stack.pop());}
}
class Operation{public static int ADD = 1;//加public static int SUB = 1;//减public static int MUL = 2;//乘public static int DIV = 2;//除/*** 得到操作符的优先级,这里用的是自定义优先级* @param operation 操作符* @return*/public static int priority(String operation){int res = 0;switch (operation) {case "+":res = ADD;break;case "-":res = SUB;break;case "*":res = MUL;break;case "/":res = DIV;break;default:break;}return res;}
}

2.代码分析

代码主要分为两部分,中缀表达式转后缀表达式和计算函数

总结

这是一个栈的实际运用,前人太伟大,我们只能不断的学习和进步。

http://www.lbrq.cn/news/2434105.html

相关文章:

  • 购物平台排行榜2020seo搜索引擎优化关键词
  • 做网站卖产品要注册公司吗抖音seo源码搭建
  • wordpress配置数据库文件夹电脑优化是什么意思
  • 域名和网站的区别北京昨晚出什么大事
  • 为公益组织做网站重庆高端seo
  • wordpress在文章中加背景云seo
  • 日本做暧小视频在线观看网站网站seo优化皆宣徐州百都网络不错
  • 做网站采集内容广东疫情最新数据
  • 如何判断一个网站的关键词是否难做营销软文范例
  • 做代加工的网站发布成人培训机构
  • wordpress缓存首页不正常seo中心
  • docker做网站百度爱采购平台官网
  • 做艺术品的网站烘焙甜点培训学校
  • 网站开发怎么实现用户一对一发文字图片深度搜索
  • app推广拉新工作可靠吗seo 培训教程
  • 福建省政府网站建设与管理seo前景
  • 域名服务器都有了怎么做网站seo视频教程百度云
  • 电商网站的银行支付接入该怎么做长沙网站seo分析
  • 建网站需要多少钱和什么条件才能建百度不让访问危险网站怎么办
  • 兰州疫情最新情况通报seo权威入门教程
  • 电影网站logo设计seo排名公司
  • 山东省建设厅网站维护电话百度竞价推广出价技巧
  • 意识形态网站建设希爱力双效片副作用
  • 免费网站建立软文发布平台排名
  • 手机摄影网站如何做优化排名
  • 山西省建设厅政务中心网站百度seo建议
  • 泰安网站建设有哪些百度网站快速优化
  • 网站设计制作 联系郑州网站seo优化
  • 网站建设需要准备什么软件建立一个网站需要花多少钱
  • 做网站找云无限巩义网络推广公司
  • Maven 环境配置全攻略:从入门到实战
  • 【LeetCode 热题 100】46. 全排列——回溯
  • SecretFlow (3) --- 添加合作方并创建项目
  • 《Uniapp-Vue 3-TS 实战开发》自定义时间选择
  • Qt基本控件使用:按钮、标签、文本框等
  • 蚂蚁数科AI数据产业基地正式投产,携手苏州推进AI产业落地