java实现栈-数据结构

目标检测中的困难样本挖掘:YOLOv5训练效果提升30%的秘诀 本文深入探讨了目标检测中困难样本挖掘的关键技术,特别是如何通过在线困难样本挖掘(OHEM)策略显著提升YOLOv5模型的性能。文章详细解析了困难样本的分类、识别机制及实战配置,并提供了数据标注策略与增强技巧,最终实现模型性能提升30%的突破。 阅读详情

栈(stack)

1)栈是一个先入后出(FILO-First In Last Out)的有序列表
2)栈(stack)是限制线性表中元素的插入和删除只能在线性表的同一端进行的一种特殊线性表。允许插入和删除的一端,为变化的一段,成为栈顶(Top),另一端为固定的一端,称为栈底(Bottom)。
3)根据栈的定义可知,最先放入栈中的元素在栈底,最后放入的元素在栈顶,而删除元素刚好相反,最后放入的元素最先删除,最先放入的元素最后删除。

入栈(push)的图解:

在这里插入图片描述

出栈(pop)

在这里插入图片描述

栈的应用场景
1)子程序的调用:再跳往子程序前,会先将下一个指令的地址存到堆栈中,直到子程序执行完后再将地址取出,以回到原来的程序中。
2)处理递归调用:和子程序的调用类似,只是除了储存下一个指令的地址外,也将参数,区域变量等数据存入堆栈中。
3)表达式的转换[中缀表达式转后缀表达式]与求值(实际解决)。
4)二叉树的遍历。
5)图形的深度优先(depth-first)搜索法。

java代码实现栈:

//定义一个 ArrayStack 表示栈
class ArrayStack {
    private int maxSize; //栈的大小
    private int[] stack; //数组,数组模拟栈,数据就放在该数组。
    private int top = -1; //top表示栈顶,初始化为-1

    //构造器
    public ArrayStack(int maxSize) {
        this.maxSize = maxSize;
        stack = new int[this.maxSize];
    }

    //栈满
    public boolean isFull() {
        return top == maxSize - 1;
    }

    //栈空
    public boolean isEmpty() {
        return top == -1;
    }

    //入栈(push)
    public void push(int value) {
        //先判断栈是否满
        if (isFull()) {
            System.out.println("栈满");
            return;
        }
        top++;
        stack[top] = value;
    }

    //出栈
    public int pop() {
        //先判断栈是否为空
        if (isEmpty()) {
            throw new RuntimeException("栈空,没有数据");
        }
        int p = stack[top]; //记录下来原来的栈顶元素
        top--;
        return p;
    }


    //展示栈
    public void show(){
        //先判断栈是否为空
        if (isEmpty()) {
            throw new RuntimeException("栈空,没有数据");
        }
        for (int i = 0; i <= top; i++) {
            System.out.printf("%d ",stack[i]);
        }
        System.out.println();
    }
}

首先,top指向-1的位置,判断栈满的方法即当top指向length-1的位置时,即为栈满。栈空即为top=-1 时。push(入栈时),首先让top++,随后让top指向的位置的元素等于入栈的值。(pop)出栈即使top–。这里注意的是,当入栈或者出栈时,都需要先进行判断栈是否已满或栈是否为空。

测试代码:

/**
 * 数组模拟栈
 */
public class ArrayStackDemo {
    public static void main(String[] args) {
        ArrayStack stack = new ArrayStack(4);
        String key = "";
        boolean loop = true; //控制是否 退出菜单
        Scanner scanner = new Scanner(System.in);
        while (loop){
            System.out.println("show:表示显示栈");
            System.out.println("exit: 退出程序");
            System.out.println("push 入栈");
            System.out.println("pop 出栈");
            key = scanner.next();
            switch (key){
                case "show":
                    try{
                        stack.show();
                    }catch (Exception e){
                        e.printStackTrace();
                    }
                    break;
                case "exit":
                    scanner.close();
                    loop = false;
                    break;
                case  "push":
                    System.out.println("请输入一个值:");
                    int num = scanner.nextInt();
                    stack.push(num);
                    break;
                case "pop":
                    try{
                        int pop = stack.pop();
                        System.out.printf("出栈的数据是%d\n",pop);
                    }catch (Exception e){
                        e.printStackTrace();
                    }
            }
        }
    }
}

栈使用的场景较多,比较重要,但实现代码并不难。
Come on! let’s learn programming together .

From today on , I will continue to share the algorithms I have learned every day. And learn English with you,let’s work hard together!

MUJOCO+AUBO机械臂+强化学习+路径规划 最近在学习机械臂强化学习路径规划,参考了知乎教程。由于原教程较老(使用stable baselines3+panda-gym),新版本变化了,我略做调整,记录写在。上面这个教程用的是官方,环境封装较死(类似),最终基于重新开发。代码已开源至github:https://github.com/YellowThree-HS/mujoco-Aubo-RL-PathPlanning。 阅读详情

相关推荐

RK3588设备树节点实战:从零配置音频与显示模块(ES8388+DSI0)

本文详细介绍了在RK3588平台上配置音频编解码器ES8388和显示接口DSI0的设备树节点实战。通过具体案例拆解设备树节点的编写逻辑与调试技巧,包括音频路由与声卡配置、DSI控制器基础配置、视频通路路由配置以及电源管理与时钟树设计。文章还提供了调试工具与实战技巧,帮助开发者快速解决常见问题。

weixin_42525637的博客 351

【数据结构】Java实现栈

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

qq_53869058的博客 5215

蚂蚁区块链第20课 可信存证司法链从入门到实施

1. 摘要 杭州互联网法院和司法区块链平台的技术建设方都是蚂蚁金服区块链。那么,如何借助蚂蚁的技术能力和服务能力,快速对接上司法链,便于后续打通存证/维权的闭环流程。本文介绍蚂蚁区块链可信存证的业务及特点,费用及接入方法等,具有实战指导意义。 2. 蚂蚁区块链可信存证的介绍 蚂蚁区块链可信存证具备全链路可信,司法权威节点见证,安全隐私保护,一站式接入能力,全国首家法律认可的区块链存证平台。 2...

辉哥的技术投资路 6086

java数据结构与算法之栈(Stack)设计与实现

【版权申明】转载请注明出处(请尊重原创,博主保留追究权!) http://blog.youkuaiyun.com/javazejian/article/details/53362993 出自【zejian的博客】 关联文章:java数据结构与算法之顺序表与链表设计与实现分析 java数据结构与算法之双链表设计与实现 java数据结构与算法之改良顺序表与双链表类似ArrayLi...

zejian的博客 5853

RK3568 开发实战:手动构建 Linux 4.19 内核镜像与设备树优化

本文详细介绍了为RK3568开发板手动编译Linux 4.19内核的完整实战流程。从环境搭建、源码获取、内核配置,到设备树深度定制与优化,再到镜像打包与烧写,旨在帮助开发者脱离官方SDK依赖,实现对嵌入式Linux系统的完全掌控,提升硬件适配与性能优化能力。

weixin_29175469的博客 269

UNITY2022 Cardboard环境搭建

必须安装 Git,并且 git 可执行文件必须位于 PATH 环境变量中。考文档:https://developers.google.cn/cardboard/develop/unity/quickstart?转到 Assets/Samples/Google Cardboard//Hello Cardboard/Scenes/HelloCardboard 场景中。粘贴https://github.com/googlevr/cardboard-xr-plugin.git到文本输入字段中。

weixin_39510925的博客 1211

java实现栈的顺序存储结构

栈是一种只能在一端进行插入或删除的线性表。表中允许进行插入、删除操作的一端称为栈顶。栈顶的挡墙位置是动态的,由一个称为栈顶指针的位置指示器指示。表的另一端称为栈底。 栈中没有数据元素时,称为空栈。栈的插入操作通常称为压栈或进栈,栈的删除操作通常称为退栈或出栈 主要特点:先进后出,即先进栈的元素,后出栈。 代码实现如下 public class Stack { priv...

zhblanlan的博客 1361

大模型——AI对话四象限

{ "摘要": "文章揭示了90%的人不会有效与AI沟通的问题,指出简单粗暴的提问只能得到标准答案。作者提出'AI对话四象限'模型:1)双方都懂时提效;2)AI懂但需学会分层提问;3)共同探索未知领域;4)向AI传授独家知识。强调沟通技巧的重要性,认为会提问的人不会被AI替代。最后呼吁读者尝试四象限思维,与AI碰撞火花。" }

312

数据结构之顺序栈实现与操作(java实现)

一、栈的定义            栈:栈是限定仅在表尾进行插入或则删除操作的线性表,对栈来说表尾端我们称之为栈顶,表头端称为栈底。            数据特点:先进后出二、顺序栈的定义          顺序栈:利用顺序存储结构实现的栈,即利用一组地址连续的存储单元依次存放自栈底到栈顶的数据元素          优点:相比于链栈,顺序栈在实现以及操作上均比链栈要容易许多          ...

江南V的博客 2010

【系列06】端侧AI:构建与部署高效的本地化AI模型 第5章:模型剪枝(Pruning)

结构化剪枝移除的是模型中的整个结构,比如一个完整的神经元、一个卷积核或一个通道。修剪后的模型权重矩阵仍然是稠密的,因此能够充分利用现代硬件和软件的并行计算优势,从而显著提升推理速度。非结构化剪枝是最细粒度的剪枝方法。对于需要极致压缩但对推理速度要求不高的场景,非结构化剪枝是好的选择。它就像修剪一棵树,通过移除模型中不必要的“枝叶”,让模型变得更精简、更高效,从而适应资源受限的设备。,开发者可以方便地对模型的不同层进行剪枝,并根据需求进行微调,从而在不影响太多性能的前提下,获得一个更轻量、更高效的模型。

学习,输出==》再学习再输出 649

华为OD机试 - 整型数组按照个位数排序(Java 双机位C卷 100分)

华为OD机试 双机位C卷题库疯狂收录中,刷题。

学Java,找哪吒 349

Java | 数据结构 - 栈和队列的构建及其基本操作(代码含注释,超详细)

栈是一种后进先出或先进后出的线性表,其插入和删除操作只允许在表的尾端进行。 队列是一种先进先出或后进后出的线性表,只允许在表尾插入数据,在表头删除数据。

日常记录 1931

AI智算-K8s如何利用IB RDMA网络加速大模型分布式训练

在AI人工智能领域,大模型的微调是提升性能不可或缺的一环。通过结合InfiniBand RDMA网络的高速互联、Kubernetes的云原生容器化部署,以及智能算力调度平台,可以打造一个高效、灵活且可扩展的分布式训练环境。

Kason_iWiki 816

【Java数据结构】实现栈和队列

【Java数据结构】实现栈和队列

yanxiang3306 6609

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

【数据结构】之链栈的java实现

前言 最近参加一些校招,博主被问了很多数据结构的问题,其中很多问题面试官需要的答案不仅仅是需要你了解这些概念,而是需要你通过某种语言(C、C++、Java)把这种结构实现,同时还能根据公司的具体需求进一步优化。对于博主这样,数据结构功底薄弱的选手,最终结果只能“被面”。痛定思痛,现在痛苦狂补中。江湖中有句话“欠下的债终究要还的”。 链栈 栈的链式存储结构称为链栈。 在算法中要用到多个栈时,

博学而笃志,切问而近思 7179

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

Java数据结构-栈的实现

一步到位,把栈实现了

算法萌新一枚 1823

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

java 数据结构 栈的实现

java数据结构之栈的实现,可是入栈,出栈操作; /** * java数据结构之栈的实现 * 2016/4/26 **/ package cn.Link; public class Stack{ Node tail = new Node(); Node nowNode = new Node(); //永远指向栈顶 int si...

163

java 实现栈数据结构

        栈数据结构java实现  import java.util.*;class MyStack ...{        int keyWord;    MyStack next;            public MyStack(int keyWord,MyStack next)...{        this.keyWord = keyWord;        this

liukaiwei0805的专栏 694

01 Java基本数据结构之栈实现

笔者在学习了数据结构后,希望通过Java实现加深印象,如栈、队列、链表等基本结构,可网上这方面资料比较少或者带有各种个人风格不太规范的代码,零零碎碎的,对于我这个初学者而言不太友好,有些地方不是很理解,因此阅读了《Java数据结构和算法》,学习里面的基本数据结构的Java实现,并参考里面代码写下博客记录自己的学习过程。同时文章主要专注于数据结构代码的实现和理解,对于数据结构原理部分不会很详细,希望能对有同样困惑的朋友有个小小的参考。

R_conqueror的博客 961

【数据结构】使用 Java 实现栈

栈示意图 先进后出 使用 Java 实现栈 public class MyStack { // 用一个数组作为栈的底层 private int[] elements; /** * 构造一个空的栈 */ public MyStack() { elements = new int[0]; } /** * 压栈 * * @param e */ public void pu

Yuu 678

Java实现栈数据结构

栈(英语:stack)又称为栈或堆叠,是计算机科学中一种特殊的串列形式的抽象数据类型,其特殊之处在于只能允许在链表或数组的一端(称为堆栈顶端指针,英语:top)进行加入数据(英语:push)和输出数据(英语:pop)的运算。另外栈也可以用一维数组或链表的形式来完成。堆栈的另外一个相对的操作方式称为队列。 由于堆栈数据结构只允许在一端进行操作,因而按照后进先出(LIFO, Last In Firs...

weixin_33686714的博客 188

数据结构之栈(超详细)java实现

简单的栈结构

m0_74344139的博客 2029

在java的实现栈的插入数据_栈之Java实现数据结构

一、什么是栈?栈(stack)又叫先进后出表,它是一种运算受限的线性表。它只允许在表的一端进行插入和删除操作,我们称之为栈顶,相对另一端称为栈底。我们可以通俗一点,将栈比喻为一个垃圾桶,垃圾桶底就类似我们的栈底(bottom),垃圾桶口就类似我们的栈顶(top),当有第一个垃圾扔进去时肯定在最底上,直至桶满,我们把垃圾往出倒肯定是最后扔进去的垃圾最先出来。这就类似我们的栈元素先进后出,用一张图来进...

weixin_30045711的博客 1305

数据结构——java实现栈

栈 定义: 栈是一种先进后出的数据结构,我们把允许插入和删除的一端称为栈顶,另一端称为栈底,不含任何元素的栈称为空栈 栈的java代码实现: 基于数组: 1 import org.junit.jupiter.api.Test; 2 3 /** 4 * 用数组实现栈 5 * @author wydream 6 * 7 */ 8 ...

weixin_30412167的博客 136

数据结构用链表实现栈java_Java数据结构——用链表实现栈

//=================================================// File Name :LinkStack_demo//------------------------------------------------------------------------------// Author :Common//类名:Link...

weixin_34832116的博客 399

java中栈的定义_Java数据结构之栈的基本定义与实现方法示例

本文实例讲述了Java数据结构之栈的基本定义与实现方法。分享给大家供大家参考,具体如下:一、概述:1、基本概念:栈是一种数据结构,是只能在某一端插入和删除的特殊线性表。它按照后进先出的原则存储数据,先进入的数据被压入栈底,最后的数据在栈顶,需要读数据的时候从栈顶开始弹出数据(最后一个数据被第一个读出来)。栈是允许在同一端进行插入和删除操作的特殊线性表。允许进行插入和删除操作的一端称为栈顶(top)...

weixin_42512021的博客 1405
上一篇: 数据结构——单链表(JAVA)
下一篇: JAVA栈实现简单的计算器
AlonScholar
博客等级 码龄7年 25粉丝 19原创
评论 2
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值