Java基础数据结构之栈

一.什么是栈

栈是一种特殊的线性表,它只允许在固定的一端进行元素的添加与使用,且遵循先进后出的原则。添加取用元素的一端称为栈顶,另一端称为栈底。出栈和入栈都是操作栈顶元素

二.栈的模拟实现

栈的底层是一个数组

这是里面的成员变量以及构造方法

压栈(入栈)

首先要检测栈是否满,如果满,就要进行2倍扩容。注意,此扩容会产生新的对象!!!而不是在原数组上扩容。

出栈

遵循后进先出,所以要返回数组最后一个元素,而且要更新size的值。

这样对吗?显然没有考虑栈为空的情况,修改如下:

获取栈顶元素

三.Stack的使用

这里发现,Stack竟然没有数组来存放元素,这是因为,它用的是它的父类Vector的数组

入栈:

调用了父类的addElement方法:

要确定容量,容量不够就要扩容:

这里提到了capacityIncrement这个量,我们看一下这个量的解释:

这是一个容量增量,在扩容时,数组容量的增加量就是我们所指定的capacityIncrement的大小,而当没有指定这个量时,数组就会进行二倍扩容。

再继续看grow方法:

newcapacity的大小就是我上面说的,用它与mincapacity比较,选择其中的最大值进行扩容。注意,扩容是产生新的数组。

出栈:

调用了另一个方法:

首先检查下标合法性,然后将它之后的元素整体向前一定一位。注意将末尾位置置为空!!!

获取栈顶元素:

还是调用了另一个方法:

然后再用一个方法返回对应下标的元素:

用到了向下转型

返回某一元素的下标:

用到了一个方法:

先判断下表是否合法,再看o是否为null,否则走else语句

为什么要判断是否为null?因为只有不为null时才能调用equals方法!!!否则就会空指针异常

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

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

相关文章

智能汽车加速车规级存储应用DS2431P+TR 汽车级EEPROM 存储器IC

DS2431PT&R是一款1024位1-Wire EEPROM芯片,由四页存储区组成,每页256位。数据先被写入一个8字节暂存器中,经校验后复制到EEPROM存储器。该器件的特点是,四页存储区相互独立,可以单独进行写保护或进入EPROM仿真模式…

第2章 线性代数

目录 1. 标量、向量、矩阵和张量2. 矩阵和向量相乘3. 单位矩阵和逆矩阵4. 线性相关和生成子空间5. 范数6. 特殊类型的矩阵和向量7. 特征分解8. 奇异值分解9. Moore-Penrose伪逆10. 迹运算11. 行列式 1. 标量、向量、矩阵和张量 标量(scalar):…

【 C++ 】特殊类设计

1、请设计一个类,不能被拷贝 拷贝只会出现在两个场景中:拷贝构造函数以及赋值运算符重载,因此想要让一个类禁止拷贝,只需让该类不能调用拷贝构造函数以及赋值运算符重载即可。在C98和C11都有相对应的方法来解决此问题&#xff0c…

ssm172旅行社管理系统的设计与实现

** 🍅点赞收藏关注 → 私信领取本源代码、数据库🍅 本人在Java毕业设计领域有多年的经验,陆续会更新更多优质的Java实战项目希望你能有所收获,少走一些弯路。🍅关注我不迷路🍅** 一 、设计说明 1.1 研究…

day03-Vue-Element

一、Ajax 1 Ajax 介绍 1.1 Ajax 概述 概念:Asynchronous JavaScript And XML,异步 的 JavaScript 和 XML。 作用: 数据交换:通过 Ajax 可以给服务器发送请求,并获取服务器响应的数据。异步交互:可以在 不…

Java教程:SpringBoot项目如何对接Nacos实现服务发现治理,配置管理

–Nacos大家都知道,不懂的可以去官网或者网上查阅一下,本次给大家讲解一下如何在SpringBoot项目中引入Nacos服务来进行服务治理与发现,配置管理等,在微服务当中是必不可少的,各个模块之间可以通过Feign远程调用&#x…

物联网主机:为智能交通赋能

物联网(IoT)技术的发展为智能交通领域带来了许多创新的解决方案。而在物联网应用中,物联网主机起着关键的作用。本文将为大家介绍一款名为E6000的物联网主机,它是一种多协议、多接口的物联网主机,为智能交通系统的建设…

antvX6 - Vue自定义节点,并实现多种画布操作,拖拽、缩放、连线、双击、检索等等

一、 首先 antv x6 分为两个版本 低版本和高版本 我这里是使用的2.0版本 并且搭配了相关插件 例如:画布的图形变换、地图等 个人推荐 2.0版本,高版本配置多,可使用相关插件多,但是文档描述小,仍在更新, 低…

小d和图片压缩

题目描述 小ddd和她对象小红去海洋馆玩了,但是由于小ddd拍照技术不好,他对象说把她拍的像嘎子! 小ddd看了看,发现是小红最近长痘痘了,于是他为了讨小红开心,让痘痘看不见,自学了图像压缩这个技…

装饰器模式 详解 设计模式

装饰器模式 它允许你在不改变对象结构的情况下,动态地将新功能附加到对象上。 结构: 抽象组件(Component):定义了原始对象和装饰器对象的公共接口或抽象类,可以是具体组件类的父类或接口。具体组件&…

固定排班计划

目录 1.按发车时间排序。 2.排班日期默认当天时间。 3.编辑不可修改线路和排班日期。 4.线路、车号、司机是否匹配,不匹配不可入库(和其他表比),线路、发车时间、司机、车号、日期、上下行相同不可入库(和自己表比…

GO语言学习笔记(与Java的比较学习)(一)

GO的优缺点: 此处引用华为云开发者联盟的一篇文章: GO语言的亮点很明显: GoDoc。 GoDoc的静态语言分析能力很强大,可以直接从代码和注释生成漂亮的文档。这一点区别于其他的类似工具如JavaDoc, PHPDoc或者JSDoc。这些工具需要添加…

如何在群晖Docker运行本地聊天机器人并结合内网穿透发布到公网访问

文章目录 1. 拉取相关的Docker镜像2. 运行Ollama 镜像3. 运行Chatbot Ollama镜像4. 本地访问5. 群晖安装Cpolar6. 配置公网地址7. 公网访问8. 固定公网地址 随着ChatGPT 和open Sora 的热度剧增,大语言模型时代,开启了AI新篇章,大语言模型的应用非常广泛,包括聊天机…

C# Socket通信从入门到精通(21)——TCP发送文件与接收文件 C#代码实现

1、前言 我们在开发上位机软件的过程中经常需要发送文件,本文就是介绍如何利用tcp客户端发送文件、tcp服务器端接收文件,而且本文介绍的方法可以自动发送一个文件夹下的所有子目录以及所有文件,经验来自于实际项目,具备非常有价值的参考意义! 2、发送文件以及C#代码 被发…

LeetCode第48天 买卖股票的最佳时机 买卖股票的最佳时机II 动态规划

121. 买卖股票的最佳时机 class Solution { public:int maxProfit(vector<int>& prices) {// int res 0 ;// int low INT_MAX;// for (int i 0; i < prices.size(); i) {// low min(low, prices[i]);// res max(res, prices[i]-low);// }// return r…

低密度奇偶校验码LDPC(八)——QC-LDPC译码器FPGA设计概要

往期博文 低密度奇偶校验码LDPC&#xff08;一&#xff09;——概述_什么是gallager构造-CSDN博客 低密度奇偶校验码LDPC&#xff08;二&#xff09;——LDPC编码方法-CSDN博客 低密度奇偶校验码LDPC&#xff08;三&#xff09;——QC-LDPC码概述-CSDN博客 低密度奇偶校验码…

Linux系统--------内核参数调优、一键安装nginx、tomcat调优

一、内核参数调优 默认的Linux内核参数考虑的是最通用场景&#xff0c;不符合用于支持高并发访问的Web服务器的定义&#xff0c;根据业务特点来进行调整&#xff0c;当Nginx作为静态web内容服务器、反向代理或者提供压缩服务器的服务器时&#xff0c;内核参数的调整都是不同的…

Spring面试系列-02

1. Spring 中自动装配有那些局限性? 自动装配的局限性 重写:仍需用<constructor-arg>和<property>配置来定义依赖,意味着总要重写自动装配。 基本数据类型:不能自动装配简单的属性,例如基本数据类型、String字符串、和类。 模糊特性:自动装配不如显式装配…

Vue点击复制到剪切板

一、Vue2写法 安装 &#xff08;官网地址&#xff09; npm install --save vue-clipboard2 使用 //main.js import VueClipboard from vue-clipboard2 Vue.use(VueClipboard)//页面使用 <button type"button"v-clipboard:copy"message"v-clipboard:su…

Mac电脑软件开发的优缺点

Mac电脑软件开发的优缺点 在软件开发领域&#xff0c;Mac电脑一直以其独特的优势占有一席之地。然而&#xff0c;就像任何工具或平台一样&#xff0c;Mac电脑在软件开发方面也存在其优点和缺点。本文将探讨在Mac上进行软件开发的利弊&#xff0c;帮助您了解是否应将Mac作为您的…