Java数据结构5(栈)

Java数据结构与算法相关题 Java数据结构与算法相关题 1.栈是一种按“后进先出“,原则进行插入和删除操作的数据结构,因此( A ) 必须用栈。 A、实现函数或过程的递归调用及返回处理时 B、将一个元素序列进行逆置 C、链表结点的申请和释放 D、可执行程序的装入和卸载 2.一个栈的输入序列为 1 2 3 4 5,则下列序列中不可能是栈得输出序列的是( A ) A.5 4 1 3 2 B.2 3 4 1 5 C.1 5 4 3 2 D.2 3 1 4 5 3.下列关于栈的叙述正确的是( D ) A、栈是非线性结构 B、栈是一种树状 阅读详情

目录

1,栈的相关理解

2,栈的应用

一,栈的相关理解

概念:

栈:⼀种特殊的线性表,其只允许在固定的⼀端进行插⼊和删除元素操作。进行数据插⼊和删除操作 的⼀端称为栈顶,另⼀端称为栈底。栈中的数据元素遵守后进先出LIFO(Last In First Out)的原则。压栈:栈的插⼊操作叫做进栈/压栈/⼊栈,⼊数据在栈顶。出栈:栈的删除操作叫做出栈。出数据在栈顶。特点:先进后出(竖着的数组,开口在上)

栈的相关方法:

方法名功能作用备注
push()入栈,将元素添加到栈顶栈结构新增元素
pop()出栈,删除并返回栈顶元素栈空会报错 / 返回 null
peek() / top()取栈顶,只查看不删除元素不改变栈结构
isEmpty()判断栈是否为空空返回 true,非空 false
size()获取栈中元素总个数返回整数
clear()清空栈中所有元素重置为空栈
search()查找元素,返回距栈顶位置找不到返回 - 1
contains()判断栈是否包含指定元素存在返回 true

栈的应用及相关题目

1,顺序问题

答:问题一选C,因为当你要3在开头的话,就先放123,然后拿出3,不过3的后一个就得是栈顶端的2或者还没放进去的4了,不可能为1;问题二选B,B就是简单的从顶部往外拿

2,逆序打印

因为栈是先进后出,所以可以运用栈来实现逆序打印

import java.util.LinkedList;
import java.util.Stack;
public class Test {
    public static void main(String[] args) {
        LinkedList<Integer> linkedList1=new LinkedList<>();
        linkedList1.add(1);
        linkedList1.add(2);
        linkedList1.add(3);
        System.out.println(linkedList1);
        change(linkedList1);
    }
    public static void change(LinkedList<Integer> linkedList){
        Stack<Integer> stack=new Stack();
        for (int i = 0; i < linkedList.size(); i++) {
            stack.push(linkedList.get(i));
        }
        while (!stack.empty()){
            int a = stack.pop();
            System.out.print(a+" ");
        }

    }
}

打印结果就是[1, 2, 3]和3 2 1

3,有效的括号

20. 有效的括号 - 力扣(LeetCode)

我们判断是否有效的话就可以通过比较最后一个左括号和第一个右括号是不是相等,那怎么拿到最后一个左括号呢,我们就可以通过栈,因为栈先进后出,就可以拿到最后一个,具体做法就是将字符串一个一个拿出来放在字符ch里面,然后遍历一遍所有括号,将左边的括号放进栈里面,有右括号的时候将栈里面的左括号拿出来比较,如果一样的话就从栈里面拿走,然后继续遍历,当然全是右括号直接就可以判断为假,只要判断栈是不是空就行,其他的具体看看代码来理解

class Solution {
    public boolean isValid(String s) {
           Stack<Character> stack=new Stack<>();
        for (int i = 0; i < s.length(); i++) {
            char ch1 = s.charAt(i);
            if (ch1=='(' ||ch1=='[' ||ch1=='{'){
                stack.push(ch1);
            }
            //这是右边的括号
            else {
                if (stack.empty()){
                    return false;
                }
                char ch2=stack.peek();
                if ((ch2=='('&&ch1==')')||(ch2=='['&&ch1==']')||(ch2=='{'&&ch1=='}')){
                    stack.pop();
                }else {
                    return false;
                }
            }
        }
        if (stack.empty()){
            return true;
        }
        return false;
    }
}

4,判断出栈顺序

栈的压入、弹出序列_牛客题霸_牛客网

这题的意思就是跟顺序问题一样,但是需要你代码来实现,我们可以这样来理解,我们将pushV数组的数据通过和popV的比较,不一样的就先放在栈里面,一样的再拿出来,如果最终pushV放完了,并且栈里面也空了,说明都匹配上了,就返回true,具体看代码来理解

import java.util.*;


public class Solution {
    /**
     * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
     *
     *
     * @param pushV int整型一维数组
     * @param popV int整型一维数组
     * @return bool布尔型
     */
    public boolean IsPopOrder (int[] pushV, int[] popV) {
        // write code here
        Stack<Integer> stack = new Stack<>();
        
        int j = 0;
        for (int i = 0; i < pushV.length; i++) {
            stack.push(pushV[i]);
            while (!stack.empty() && j < popV.length && popV[j] == stack.peek()) {
                j++;
                stack.pop();
            }
        }
        if (stack.empty()) {
            return true;
        }
        return false;
    }
}

5,逆波兰表达式

150. 逆波兰表达式求值 - 力扣(LeetCode)

前缀知识:我们有三种表达式,分别为前缀,中缀,以及后缀,中缀就是我们平时写的表达式,比如1+1,2*3,前缀又称波兰表达式,后缀为逆波兰,通过名字就知道前和后是有点相反的,前缀是将符号写在数字前面,后缀是写在后面,这种写法不是机器语言,但专门给计算机、给计算器、给编译器设计的 “友好表达式写法”。具体的写法如下:

这是我们平时自己做题的时候的写法,这种的做法就是运用栈来实现

具体来看看题目:

在遇到运算符前,我们先将数字放入栈里面,然后遇到运算符,我们将栈顶的元素和栈顶下面一个元素分别拿出,栈顶的在运算符右边,另外一个在左边,这不能搞反,可以自己验证一下,具体实现看代码

  public int evalRPN(String[] tokens) {
        Stack<Integer> stack = new Stack<>();
        for (String s : tokens) {
            if (!(s.equals("+") || s.equals("*") || s.equals("/") || s.equals("-"))) {
                stack.push(Integer.parseInt(s));

            } else {
                Integer val2 = stack.pop();
                Integer val1 = stack.pop();
                switch (s) {
                    case "+":
                        stack.push(val1 + val2);
                        break;
                    case "-":
                        stack.push(val1 - val2);
                        break;
                    case "*":
                        stack.push(val1 * val2);
                        break;
                    case "/":
                        stack.push(val1 / val2);
                        break;
                }

            }
        }
        return stack.pop();

    }

大模型驱动时序量化因子自动优化:从WorldQuant回测到实战策略 本文探讨了如何利用大模型驱动时序量化因子的自动优化,构建从创意生成到实战验证的完整流程。通过结合WorldQuant回测平台,搭建自动化流水线,详细拆解了因子生成、回测验证与迭代优化的核心模块。文章分享了从初版实现到进阶优化的实践经验,并指出提示词工程与领域知识注入是关键,旨在实现人机智能协作,提升量化策略研发效率。 阅读详情

相关推荐

手把手教你用OpenCalib完成激光雷达与相机联合标定:从数据准备到结果可视化

本文详细介绍了使用OpenCalib工具链中的lidar2camera模块完成激光雷达与相机联合标定的全流程,包括数据准备、标定命令执行、结果验证与可视化。通过实战指南,帮助读者掌握工业级标定技术,提升自动驾驶和机器人领域的传感器融合精度。

weixin_30872499的博客 400

java数据结构 第5章--栈

文章目录5.1 栈的一个实际需求5.2 栈的介绍5.3 栈的应用场景5.4 栈的快速入门5.4.1 用数组模拟栈的使用5.4.2 数组模拟栈的思路分析图5.4.3 代码实现5.4.4 结果演示5.4.5 关于栈的一个小练习5.5 栈实现综合计算器(中缀表达式)5.5.1 思路分析(图解)5.5.2 代码实现5.5.3 课后练习题--加入小括号.5.6 前缀、中缀、后缀表达式(逆波兰表达式)5.6.1前缀表达式(波兰表达式)5.6.2 中缀表达式5.6.3 后缀表达式5.7 逆波兰计算器1) 输入一个逆波兰表

学无止境,勤则可达;志存高远,恒亦能成! 312

STM32F103C8T6 + GY-906红外测温:手把手教你用CubeMX和HAL库搞定IIC驱动(附完整工程)

本文详细介绍了如何使用STM32F103C8T6和GY-906红外测温传感器(基于MLX90614芯片)实现非接触式温度测量。从STM32CubeMX工程创建、HAL库驱动适配到温度数据采集与处理,提供完整的开发流程和常见问题解决方案,帮助开发者快速掌握红外测温技术。

weixin_29188043的博客 254

java数据结构5:栈

第5章:栈 1、栈 栈(stack):先进后出 2、数组模拟栈 class ArrayStack{ private int maxSize; private int[] stack; private int top=-1; //栈顶 public ArrayStack(int maxSize) { this.maxSize = maxSize; stack=new int[this.maxSize]; } public

qq_43349162的博客 185

Pyrosim进阶指南:从隧道火灾模拟到复杂通风策略分析

本文深入探讨Pyrosim在隧道火灾模拟与通风策略分析中的高级应用。从精确几何建模到火源参数设置,再到通风系统的量化分析,详细介绍了如何利用Pyrosim优化隧道安全设计。特别强调了临界风速验证、横向通风配置及结果可视化技巧,为工程师提供实用的进阶指南。

weixin_30644369的博客 138

AEJoy —— 最受欢迎的 5 个 Ae 表达方式

NOTE] 原文作者我意识到表达式可能令人生畏,有些人宁愿复制粘贴有用的代码,而不愿学习这门语言。对此我完全理解。因此,我想与您分享我的。这些是我几乎在每个项目中都会使用的表达式,我认为它们极大地提升了工作流程。

ShaderJoy 的兴趣技术杂货铺 364

【Java 数据结构 & 算法】宁可累死自己, 也要卷死别人 5 栈

【Java 数据结构 & 算法】⚠️宁可累死自己, 也要卷死别人 5⚠️ 栈

我是小白呀的博客 1447

RSA算法详解:万字文章详解RSA的加密与解密

为了彻彻底底的研究明白RSA算法,真的是。。煞(lei)费(si)苦(wo)心(le),首先我希望自己前前后后、彻彻底底的琢磨明白,其次我也希望我把他分享出来以后,大家都能读得懂,这篇文章真的是我迄今为止写的又臭又长的一篇文章了,但是我能保证的是,你读完了以后,绝对不会再问RSA是啥玩意儿了。。

布啦啦 7668

java数据结构——5栈(Stack)

五、栈(Stack) 栈(Stack)是一种后进先出的数据结构(LIFO:last in first out),只允许访问栈中的第一个数据项:即最后插入的数据项。移除这个数据项之后,才能看到第二个数据项,以此类推。 往栈中存入数据称之为压栈(push),移除数据称之为弹栈(pop),此外通常还提供查看栈顶元素的peek方法,此方法可以拿到栈顶元素的值,但是并不会将其移除。 java.util

zajiayouzai的博客 386

Firefox卸载卡住不动的解决方案

本文主要介绍了Firefox卸载卡住不动的解决方案,希望能对使用Windows的同学们有所帮助。 文章目录 1. 问题描述 2. 解决方案

weixin_43178406的博客 15万+

智护健康:基于 ESP32 的可穿戴式心率血氧远程监测手环设计与实现

随着健康管理理念的普及,可穿戴式健康监测设备成为刚需。本文设计了一款基于 ESP32 芯片的可穿戴式心率与血氧远程监测手环,通过集成专业生物传感器采集生理数据,借助 ESP32 的无线通信能力实现数据远程传输,搭配手机 APP 与云平台完成数据存储、分析与预警。文中详细阐述了硬件选型、模块接线、软件设计流程及核心代码实现,该手环具备低功耗、高精度、实时性强等特点,可满足日常健康监测与远程照护需求。

weixin_42300449的博客 1200

java 栈的遍历_5, java数据结构和算法: 栈 , 入栈, 出栈, 正序遍历,,逆序遍历

直接上代码:class ArrayStack{//用数组模拟栈int maxSize;int[] stack;int top = -1;//表示栈顶public ArrayStack(int maxSize) {this.maxSize = maxSize;this.stack = new int[maxSize];}//1, 入栈public void pushStack(int value){...

weixin_29837797的博客 1690

【Qt】解决 FTH: (11284): *** Fault tolerant heap shim applied to current process. (亲测有效)

计算机\HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\AppCompatFlags\Layers。容错堆垫片应用到当前的过程。这通常是由于以前的崩溃。win + r,输入regedit。

Fanjufei的博客 830

java 16 - 5 LinkedList模拟栈数据结构的集合

  请用LinkedList模拟栈数据结构的集合,并测试     题目的意思是:     你自己的定义一个集合类,在这个集合类内部可以使用LinkedList模拟。 1 package cn_LinkedList; 2 3 import java.util.LinkedList; 4 5 6 7 8 public class MyStack ...

weixin_30608503的博客 69

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

数据结构Java版(5)——链栈和链队列的实现

用Java实现了链栈和链队列

2301_77523019的博客 503

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

数据结构与算法之美 栈的代码实现

java // 基于数组实现的顺序栈 public class ArrayStack { private String[] items; // 数组 private int count; // 栈中元素个数 private int n; // 栈的大小 // 初始化数组,申请一个大小为 n 的数组空间 public ArrayStack(int n) { this.items = new String[n]; this.n = n

ly410726的专栏 283

锂电池充电器电路设计 里面有电路

锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。

java 剑指offer之[数据结构 中等]JZ5 用两个栈实现队列

题目的链接在这里:https://www.nowcoder.com/practice/54275ddae22f475981afa2244dd448c6 目录题目大意一、示意图二、解题思路队列和栈的知识 题目大意 描述 用两个栈来实现一个队列,完成 n 次在队列尾部插入整数(push)和在队列头部删除整数(pop)的功能。 队列中的元素为int类型。保证操作合法,即保证pop操作时队列内已有元素。 一、示意图 二、解题思路 队列和栈的知识 队列和栈的知识 代码如下: import java.uti

wzw的博客 110

java stack 从1.5开始?_java数据结构与算法之栈(Stack)设计与实现

本篇是java数据结构与算法的第4篇,从本篇开始我们将来了解栈的设计与实现,以下是本篇的相关知识点:栈的抽象数据类型栈是一种用于存储数据的简单数据结构,有点类似链表或者顺序表(统称线性表),栈与线性表的最大区别是数据的存取的操作,我们可以这样认为栈(Stack)是一种特殊的线性表,其插入和删除操作只允许在线性表的一端进行,一般而言,把允许操作的一端称为栈顶(Top),不可操作的一端称为栈底(Bot...

weixin_35915828的博客 95

Java数据结构-栈(stack)

数据结构-栈

vintind的博客 370

Java数据结构——6.栈和队列

比特就业课Java数据结构——栈和队列 课后思维总结

要努力去发光,而不是被照亮~ 535

[java数据结构]栈

手写栈

XJC0721的博客 233

java数据结构基础:栈

数组定义好了之后呢,想想,我们怎么去获取到栈尾部或者栈首的元素呢?参考官方文档的写法,当栈的长度满了之后我们就对栈长度进行1.5倍的扩容。其次,添加完元素之后,栈元素的长度发生了变化,size+1。我们知道,数组的第一个元素是索引为0,那么-1的意思就是不指向任何元素。我们知道,当元素添加了之后,index会跟着改变,那么就好比我们添加了三个元素,此时的index应该就是指向的2。以上是Java官方文档中的栈定义,我们也只需要实现三个方法:判断是否为空、移除栈顶对象、添加元素到栈的尾部。

dituirenwu的博客 258

Java5 下实现锁无关数据结构

from:IBM developworks  本文将介绍锁无关数据结构的应用及其相关概念,并在 Java 环境下利用 JDK 1.5 提供的一组类进行锁无关数据结构设计,从而避免基于锁的数据结构可能引发的同步问题,以改善程序的可靠性。介绍 通常在一个多线程环境下,我们需要共享某些数据,但为了避免竞争条件引致数据出现不一致的情况,某些代码段需要变成原子操作去执行。这时,

leagle 1077

java用数组模拟栈

用数组实现栈

Kenneth0617的博客 208

Java数据结构知识点 — 5种常见数据结构

Java中5种常见数据结构总结。

konghaoran的博客 2745

数据结构与算法学习之栈

数据结构和算法 - 栈 栈的一个实际需求 请输入一个表达式 计算式:[722-5+1-5+3-3] 点击计算【如下图】 [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-PFfYyZau-1616935348448)(%E6%A0%88/1.png)] 请问: 计算机底层是如何运算得到结果的? 注意不是简单的把算式列出运算,因为我们看这个算式 7 * 2 * 2 - 5, 但是计算机怎么理解这个算式的(对计算机而言,它接收到的就是一个字符串),我们讨论的是这个问题。-> 栈

weixin_45942124的博客 143
上一篇: Java数据结构4(自己实现简单LinkedList)
下一篇: Java数据结构6(队列和二叉树初步)
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值