数据结构------栈(Java语言描述)

栈可以看作是一种容器,用于存储数据元素。想象一下一摞盘子,最后放上去的盘子总是最先被拿走,这就是栈的工作方式。在 Java 中,栈主要用于方法调用、表达式求值等场景。栈遵循先进后出、后进先出的原则

下面是使用链表实现栈的代码示例:

链表部分的代码可以参看:数据结构------链表(Java语言描述)

package dataStructure.linked;

//自定义链表类
public class MyLinkedList {

    //最简洁的链表,只有头就可以,但是效率会低
    private LinkedNode head;

    //有尾节点可以在添加新节点时候直接挂到尾结点的后面,提高效率
    private LinkedNode tail;

    //用来记录链表里的数据的数量
    private int size;

    public int getSize() {
        return size;
    }

    //用来往链表中添加数据的方法
    public void add(int e) {
        //创建节点对象,用来存储数据,然后把节点对象放到链表里
        LinkedNode node = new LinkedNode(e);

        //这种情况表示链表是空的
        if (head == null) {
            //如果链表是空的,那么新节点即是头节点,又是尾节点
            head = node;
            tail = node;
        } else {
            //如果链表不为空,则新节点应该添加到尾节点的后面
            tail.next = node;
            tail = node;
        }
        size++;
    }


    //1,2,3,4,5
    //3
    public int get(int i) {
        if (i > size - 1) {
            throw new IndexOutOfBoundsException("下标越界" + i);
        }
        LinkedNode n = head;
        for (int j = 0; j < i; j++) {
            n = n.next;
        }
        return n.data;
    }

    //删除指定位置的数据,并返回被删除数据的值
    public int delete(int i) {
        if (i == 0) {
            LinkedNode n = head;
            head = head.next;
            n.next = null;
            size--;
            return n.data;
        }
        LinkedNode n = head;
        //要找到被删除节点的前面的节点,所以要循环i-1次
        for (int j = 0; j < i - 1; j++) {
            n = n.next;
        }
        //先接收一下被删除的节点对象
        LinkedNode del = n.next;
        n.next = n.next.next;
        del.next = null;
        size--;
        return del.data;
    }


    public String toString() {
        LinkedNode n = head;
        String str = "";
        while (n != null) {
            str = str + n.data;
            if (n.next != null) {
                str = str + "->";
            }
            n = n.next;
        }
        return str;
    }

    public static void main(String[] args) {
        MyLinkedList linked = new MyLinkedList();
        linked.add(1);
        linked.add(2);
        linked.add(3);
        linked.add(4);
        linked.add(5);
        System.out.println(linked);//1->2->3->4->5

        linked.delete(2);
        System.out.println(linked);//1->2->4->5

        System.out.println(linked.get(3));//5
    }
}

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

RK3568平台开发系列讲解(设备树篇)设备树(device Tree)的由来

🚀返回专栏总目录 文章目录 一、设备树的由来二、设备树的组成沉淀、分享、成长,让自己和他人都能有所收获!😄 一、设备树的由来 首先不得不提到Linus的一封重要的邮件:(硬件解耦)(可以复用的代码) Gaah. Guys, this whole ARM thing is a f*cking pain in the ass.…

基于C++深度优先遍历迷宫

c实现的深度优先遍历迷宫&#xff0c;迷宫大小为20*20&#xff0c;代码简练清楚&#xff0c;内涵关键注释。代码与网上都不一样。 深度优先遍历迷宫&#xff0c;核心思想是借助一个栈&#xff0c;站在一个节点上时&#xff0c;将它附近可以走的节点存在栈中&#xff0c;再按顺…

QML项目实战:自定义CheckBox

目录 一.添加模块 import QtQuick.Controls 1.2 import QtQuick.Controls.Styles 1.4 import QtGraphicalEffects 1.15 二.自定义CheckBox 1.CheckBox设置 2.勾选框设置 3.标签部分 4. 状态变化处理 5.文本设置 三.效果 1.当enabled为true 2.当enabled为true 3.当…

天命人开店日记之门店经营调研(下)

在调研前拟定了一些想要去了解的信息&#xff0c;包括&#xff1a;月销量、净利润、用户购买的主要担忧、与电商平台的竞争差异等关键内容&#xff0c;然而当自己去实地考察线下门店时&#xff0c;确发现实际情况与自己的预期相差非常大。大大出乎预料的包括三方面&#xff1a;…

【昇腾】Linux系统常见命令

文章目录 查看操作系统信息查看EulerOS内核版本 查看root下的内容查看/etc目录下的内容sh: yum: command not foundValueError: zero-size array to reduction operation minimum which has no identityAttributeError: torch_npu._C._NPUDeviceProperties object has no attri…

立体视觉的核心技术:视差计算与图像校正详解

立体视觉的核心技术&#xff1a;视差计算与图像校正详解 在立体视觉中&#xff0c;通过双目相机&#xff08;即左右两台相机&#xff09;的不同视角捕获的图像&#xff0c;结合几何关系&#xff0c;我们可以推算出场景中物体的深度。本文将深入讲解如何基于视差&#xff08;di…

11.6-11.7重大专业能力测试(换皮c++考试)全攻略(两天速通版)

relations的vector存储的就是Relation类型的数据&#xff0c;并不是指针&#xff0c;所以relations[i]访问Relation的成员就是直接用.&#xff0c; 但是joins的JoinSql里面存的是指针&#xff0c;并不是实际的数据&#xff0c;所以应当用->来访问其中的成员 结构体当中的Sq…

Go语言结构体、方法与接口

文章目录 一、结构体构造函数Go语言中的构造函数语法 二、结构体方法和接收器无参数和返回值值类型接收者指针类型接收者方法继承方法重写 三、结构体比较结构体比较要求结构体比较符号 四、接口声明接口定义接口特点接口格式标准格式接口的实现&#xff1a;空接口error接口 五…

用Puppeteer点击与数据爬取:实现动态网页交互

用Puppeteer与代理IP抓取51job招聘信息&#xff1a;动态网页交互与数据分析 引言 在数据采集领域&#xff0c;传统的静态网页爬虫方式难以应对动态加载的网页内容。动态网页通常依赖JavaScript加载数据&#xff0c;用户需要与页面交互才能触发内容显示。因此&#xff0c;我们…

Sophos | 网络安全

在 SophosLabs 和 SophosAI 的威胁情报、人工智能和机器学习的支持下&#xff0c;Sophos 提供广泛的高级产品和服务组合&#xff0c;以保护用户、网络和端点免受勒索软件、恶意软件、漏洞利用、网络钓鱼和各种其他网络攻击。Sophos 提供单一的集成式基于云的管理控制台 Sophos …

盘点RPA在政务领域落地应用

数字政府是数字经济的中坚力量&#xff0c;以强有力的“抓手”带动着各行各业的数字化转型以及新技术的应用与普及。近两年&#xff0c;以RPA为代表的数字技术在政务实践中的表现受到了很高的关注&#xff0c;RPA数字员工在各地相关政务部门悄然上岗&#xff0c;有效助力政府信…

mysql5.7安装SSL报错解决(2),总结

Caused by: java.io.EOFException: SSL peer shut down incorrectly 在java里面连接mysql5.7.17数据库&#xff0c;报以上错误&#xff0c; 将数据库升级到mysql5.7.44就可以了。 这两天处理java连接mysql的问题&#xff0c;报了各种错误&#xff0c;总结一下就是openssl和mysq…

前端基础-html-注册界面

&#xff08;200粉啦&#xff0c;感谢大家的关注~ 一起加油吧~&#xff09; 浅浅分享下作业&#xff0c;大佬轻喷~ 网页最终效果&#xff1a; 详细代码&#xff1a; ​ <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8"…

论文 | Teaching Algorithmic Reasoning via In-context Learning

这篇论文《通过上下文学习教授算法推理》探讨了如何通过上下文学习&#xff08;In-context Learning, ICL&#xff09;有效训练大型语言模型&#xff08;LLMs&#xff09;以进行算法推理。以下是从多个角度对这项工作的详细解读&#xff1a; 1. 问题陈述与研究动机 算法推理的…

Json 类型与多值索引 — OceanBase 4.3.2 AP 功能体验

本文来自 2024年OceanBase技术征文大赛——“让技术被看见 | OceanBase 布道师计划”的用户征文。也欢迎更多的技术爱好者参与征文&#xff0c;赢取万元大奖。和我们一起&#xff0c;用文字让代码跳动起来&#xff01; 参与2024年OceanBase技术征文大赛>> MySQL在5.7.8…

FPAGA学习~问题记录

1.Error: concurrent assignmentto a non-netstart is not permitted&#xff08;错误&#xff1a;不允许并发分配到非网络‘start’&#xff09; 原因&#xff1a;wire 或reg 类型不匹配引起的&#xff0c;assign与wrie搭配使用&#xff0c;而reg一般在always、initial语句块中…

微服务系列四:热更新措施与配置共享

目录 前言 一、基于Nacos的管理中心整体方案 二、配置共享动态维护 2.1 分析哪些配置可拆&#xff0c;需要动态提供哪些参数 2.2 在nacos 分别创建共享配置 创建jdbc相关配置文件 创建日志相关配置文件 创建接口文档配置文件 2.3 拉取本地合并配置文件 2.3.1 拉取出现…

003-Kotlin界面开发之声明式编程范式

概念本源 在界面程序开发中&#xff0c;有两个非常典型的编程范式&#xff1a;命令式编程和声明式编程。命令式编程是指通过编写一系列命令来描述程序的运行逻辑&#xff0c;而声明式编程则是通过编写一系列声明来描述程序的状态。在命令式编程中&#xff0c;程序员需要关心程…

Python作业记录

复制过来的代码的换行有问题&#xff0c;但是也不是什么大问题。 后续我会进行补充和修改。 请将如下英文短句根据单词切分成列表&#xff1a; The continent of Antarctica is rising. It is due to a geological phenomenon called post-glacial uplift 并在切分好的列表…

pdmaner连接sqlexpress

别以为sqlserver默认的端口总是1433 案例 有台sqlserver2008 express服务器&#xff0c;刚安装&#xff0c;支持混合模式登录&#xff0c;其它什么配置也没改。 先看用ADO连接 这说明&#xff1a; 案例中sqlserver端口不是1433 &#xff01;&#xff01;&#xff01;ADO连接…