【栈和队列(1)(逆波兰表达式)】

文章目录

  • 前言
  • 什么是栈(Stack)
  • 栈方法
  • 栈的模拟实现
  • 链表也可以实现栈
  • 逆波兰表达式
    • 逆波兰表达式在栈中怎么使用


前言

什么是栈(Stack)

栈:一种特殊的线性表,其只允许在固定的一端进行插入和删除元素操作。进行数据插入和删除操作的一端称为栈顶,另一端称为栈底。遵循先进后出的原则。

类似于:一串羊肉串,后串进去的肉最先被吃到。
底层是数组
在这里插入图片描述

栈方法

在这里插入图片描述

栈的模拟实现

//接口
public interface IStack {//放元素void push(int x);//取元素int pop();//查看元素int peek();//栈大小int size();//判断满没满boolean empty();//判断空没空boolean full();
}package stackdemo;
import java.util.Arrays;
//类实现接口
public class MyStack implements IStack{private int[] elem;//栈的底层是一个数组private int usedSize;//有效数据的个数private static final int DEFAULT_CAPACITY = 10;//自定义数组长度//构造方法public MyStack(){elem = new int[DEFAULT_CAPACITY];}//放栈顶元素@Overridepublic void push(int x) {//先检查满没满if (full()){//满了,调用数组拷贝扩容空间elem = Arrays.copyOf(elem,elem.length*2);}//没满就放xelem[usedSize] = x;usedSize++;}//取出栈顶元素@Overridepublic int pop() {if (empty()){//抛异常throw new EmptyException("栈空了!");}int old = elem[usedSize-1];//usedSize往栈底移动一格usedSize--;//相当于删除//如果是引用类型//elem[usedSize] = null;return old;}//查找栈顶的元素,跟pop不一样的是,peek不用删除噢,只是返回栈顶那个元素噢@Overridepublic int peek() {if (empty()){//抛异常throw new EmptyException("栈空了!");}return elem[usedSize-1];//}/算栈的大小@Overridepublic int size() {return usedSize;}//判断栈空没空@Overridepublic boolean empty() {return usedSize == 0;}//判断栈满没满@Overridepublic boolean full() {if (usedSize == elem.length){return true;}return false;}
}
//抛异常
public class EmptyException extends RuntimeException {//构造方法public EmptyException(String msg){super(msg);}
}

链表也可以实现栈

单链表
在这里插入图片描述
双向链表
从头入 从头出都可以
在这里插入图片描述

  1. 若进栈序列为 1,2,3,4 ,进栈过程中可以出栈,则下列不可能的一个出栈序列是()
    A: 1,4,3,2 B: 2,3,4,1 C: 3,1,4,2 D: 3,4,2,1
    答案:C

  2. 一个栈的初始状态为空。现将元素1、2、3、4、5、A、B、C、D、E依次入栈,然后再依次出栈,则元素出栈的顺
    序是( )。
    A: 12345ABCDE B: EDCBA54321 C: ABCDE12345 D: 54321EDCBA
    答案:B

逆波兰表达式

下面举的例子是后缀表达式,就是把符号移到括号右边。

怎么转换成逆波兰表达式

逆波兰表达式在栈中怎么使用

1.把式子转换成逆波兰表达式后
2.遇到数字就放栈里面
2.当遇到非数字字符,取出栈里面最顶上的两个元素,第一个元素放在字符右边,第二个放左边。
3.得到的结果又放进栈里面
4.再继续上面步骤

逆波兰表达式演示视频

class Solution {public int evalRPN(String[] tokens) {Stack<Integer> stack = new Stack<>();for(String s : tokens) {//不是操作符就是数字if (!isOperation(s)) {stack.push(Integer.parseInt(s));} else {int num2 = stack.pop();int num1 = stack.pop();switch (s) {case "+":stack.push(num1 + num2);break;case "-":stack.push(num1 - num2);break;case "*":stack.push(num1 * num2);break;case "/":stack.push(num1 / num2);break;}}}return stack.pop();}private boolean isOperation(String s) {if (s.equals("+") || s.equals("-") || s.equals("*") || s.equals("/")) {return true;//是返回true}//不是返回falsereturn false;}
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/179390.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

QB/T 1870-2015 塑料菜板检测

塑料菜板是指以聚乙烯、聚丙烯为主要原材料&#xff0c;经注射或压制成型的塑料菜板&#xff0c;通常具有抗菌性能。 QB/T 1870-2015 塑料菜板检测项目&#xff1a; 检测项目 测试标准 邵氏硬度 GB/T 2411 耐热性 QB/T 1870 耐冲击性 QB/T 1870 跌落性能 QB/T 1870 …

详解Tomcat下载安装以及IDEA配置Tomcat(2023最新)

目录 步骤一&#xff1a;首先确认自己是否已经安装JDK步骤二&#xff1a;下载安装Tomcat步骤三&#xff1a;Tomcat配置环境变量步骤四&#xff1a;验证Tomcat配置是否成功步骤五&#xff1a;为IDEA配置Tomcat 步骤一&#xff1a;首先确认自己是否已经安装JDK jdk各版本通用安装…

6、信息收集(1)

文章目录 一、DNS信息查询1、利用dig工具查询各类DNS的解析。2、使用DNS子域名爆破工具&#xff0c;针对子域名进行爆破&#xff0c;同时解析出对应的IP地址。3、利用多地Ping工具&#xff0c;查看域名真实IP。4、针对部分IP进行信息收集 二、DNS域传输实验原理方法一方法二 三…

javaEE -15( 13000字 JavaScript入门 - 2)

一&#xff1a;JavaScript(WebAPI) JS 分成三个大的部分 ECMAScript: 基础语法部分DOM API: 操作页面结构BOM API: 操作浏览器 WebAPI 就包含了 DOM BOM&#xff0c;这个是 W3C 组织规定的. (和制定 ECMAScript 标准的大佬们不是一伙人). 前面学的 JS 基础语法主要学的是 …

Unity-链接MySql5.7

链接MySql5.7 前言&#xff1a; 为什么不选择最新的MySQL8.0或者MySQL8.2呢&#xff0c;实际发现&#xff0c;如果使用这两个版本&#xff0c;虽然能够用同样的方法找到合适的dll&#xff0c;但是在编写代码的过程中往往会卡死&#xff0c;非常的影响效率&#xff0c;因此放弃…

Java入门基础:浅显易懂 关系运算符

运算符是对常量或者变量进行操作的符号&#xff0c;Java的运算符有六类&#xff1a;算术运算符、赋值运算符、自增自减运算符、关系运算符、逻辑运算符&#xff0c;三元运算符 1.关系运算符 符号作用说明等于ab 判断a和b的值是否相等!不等于a!b 判断a和b的值是否不相等>大…

python服装电商系统vue购物商城django-pycharm毕业设计项目推荐

系统面向的使用群体为商家和消费者&#xff0c;商家和消费者所承担的功能各不相同&#xff0c;所对象的权限也各不相同。对于消费者和商家设计的功能如下&#xff1a; 对于消费者设计了五大功能模块&#xff1a; &#xff08;1&#xff09; 商品信息&#xff1a;用户可在商品…

使用Echarts.js绘制多条折线图

一、页面效果 默认tab为不限&#xff0c;渲染多条折线&#xff1a; 切换tab&#xff0c;只渲染对应tab的一条折线&#xff1a; 二、功能描述 ​ 1、tab选中不限时&#xff0c;图表中同时渲染多条折线&#xff0c;对应多种类型的数据。 ​ 2、切换tab时&#xff0c;如果选中指…

Taro3+Vue3重构Mpvue小程序项目踩坑记

1、Taro小程序编译时报错&#xff1b; 原因:页面中存在小程序识别不了的标签&#xff1b;如div解决方法&#xff1a; 将div标签替换成小程序可识别的标签&#xff1b; 安装Taro中提供的插件:tarojs/plugin-html, 使其可被识别&#xff1b; 插件安装教程参考Taro官网&#xff1…

辗转相除法

其实是求a、b&#xff08;a>b&#xff09;最大公约数。 &#xff08;leetcode 1979. 找出数组的最大公约数&#xff09; 方法一&#xff1a;遍历&#xff0c;遍历的思想就是从2开始到b(或者b/2)结束&#xff0c;如果其中某个数都能被两者整除&#xff0c;那该数就是最大公约…

抖音小店怎么运营?新手应该如何做?一篇详解!

我是电商珠珠 我做抖音小店也已经快三年了&#xff0c;期间呢也不断在网上做分享。 有很多小伙伴问我最多的问题就是&#xff0c;抖音小店这么赚钱&#xff0c;那新手小白的话怎么做&#xff0c;做不起来怎么办。 我将做店总共分为了五步&#xff0c;懂事的小伙伴已经开始记…

【工具】Zotero|使用Zotero向Word中插入引用文献(2023年)

版本&#xff1a;Word 2021&#xff0c;Zotero 6.0.30 前言&#xff1a;两年前我找网上插入文献的方式&#xff0c;网上的博客提示让我去官网下个插件然后才能装&#xff0c;非常麻烦&#xff0c;导致我对Zotero都产生了阴影。最近误打误撞发现Zotero自带了Word插件&#xff0c…

KMP算法【数据结构】

KMP算法 KMP算法是一种改进的字符串匹配算法 Next[j] k :一个用来存放子串返回位置的数组&#xff0c;回溯的位置用字母k来表示。其实就是从匹配失败位置&#xff0c;找到他前面的字符串的最大前后相等子串长度。默认第一个k值为-1(Next[0] -1),第二个k值为0(Next[1] 0),我…

SpringBoot使用动态Banner

SpringBoot使用动态Banner Spring Boot 2.0 提供了很多新特性&#xff0c;其中就有动态 Banner。 1、pom依赖 <?xml version"1.0" encoding"UTF-8"?> <project xmlns"http://maven.apache.org/POM/4.0.0" xmlns:xsi"http://w…

一些关于开关电源经典回答

1、开关电源变压器如果用铜带取代漆包线&#xff0c;其允许通过的电流怎么算?比如说厚度为0.1mm的铜带&#xff0c;允许通过的电流怎么算? 专家&#xff1a;如果开关电源变压器用铜带取代漆包线&#xff0c;铜带(漆包线)的涡流损耗可以大大将小&#xff0c;工作频率可以相应…

【开题报告】基于SpringBoot的天文学知识交流平台的设计与实现

1.选题背景 天文学是一门古老而又充满神秘感的学科&#xff0c;吸引着众多人的关注和热爱。随着科技的发展&#xff0c;我们对宇宙的认知愈加深入&#xff0c;人们对天文学的热情也愈加高涨。然而&#xff0c;目前市场上缺乏一个专门的平台&#xff0c;供天文学爱好者交流、分…

React的父子组件互相通信

在写项目的时候遇到了父子组件互相调用对方的方法&#xff0c;然后知道用什么逻辑写&#xff0c;但是就是没写对过&#xff0c;开始用的props和ref,但是报错就去用的context,context在引用的时候还是报错&#xff0c;所以最后还是用的props和ref,下边是实现的案例。 父组件 Fat…

11 动态规划解最后一块石头的重量II

来源&#xff1a;LeetCode第1049题 难度&#xff1a;中等 描述&#xff1a;有一堆石头&#xff0c;用证书数组stones表示&#xff0c;其中stones[i]表示第i块石头的重量&#xff0c;每一回合&#xff0c;从中选出任意两块石头&#xff0c;然后将他们放在一起粉碎&#xff0c;…

【Java Spring】SpringBoot 配置文件

1、Spring Boot配置文件的作用 配置文件的基本作用&#xff1a; 数据库连接信息&#xff08;包括用户名和密码的设置&#xff09;项目的启动端口第三方系统的调用密钥等信息用于发现和定位问题的普通日志和异常日志等 2、Spring Boot配置文件的格式 Spring Boot配置文件主要…

想成为网络安全工程师该如何学习?

一、网络安全应该怎么学&#xff1f; 1.计算机基础需要过关 这一步跟网安关系暂时不大&#xff0c;是进入it行业每个人都必须掌握的基础能力。 计算机网络计算机操作系统算法与数据架构数据库 Tips:不用非要钻研至非常精通&#xff0c;可以与学习其他课程同步进行。 2.渗透技…