栈和队列(Java)
一.栈(Stack)
1.定义
栈是限定仅在表尾进行插入或删除操作的线性表
一般的表尾称为栈顶 表头称为栈底
栈具有“后进先出”的特点
2.对栈的模拟
栈主要具有以下功能:
-
push(Object item):将元素item压入栈顶。
-
pop():弹出栈顶元素,并将其从栈中删除。
-
peek():返回栈顶元素,但不删除它。
-
isEmpty():判断栈是否为空,返回布尔值。具体模拟代码我们可以用一个顺序表来实现如下

而在Java 编程应用idea中我们在使用时无需再进行模拟实现,可直接通过栈的实例化 然后直接进行调用栈的不同方法
![]()
实例化一个存储字符串类型的栈
则可直接stack.pop()....进行调用方法
3.括号匹配问题
链接如下:
20. 有效的括号 - 力扣(LeetCode)
该题目就需要我们对于栈的功能的熟练掌握
需我们考虑三种括号不匹配情况从而考虑入栈和出栈的适配问题
以下是代码:

二.队列(Queue)
1.定义
与栈相反,队列是一种先进先出的线性表
插入一端成为队尾,删除一端称为队头
2.对队列的模拟
队列具有以下功能:
- 1. offer(E e):添加元素到队列
2.poll():移除并返回队列头部的元素 - 3. peek():获取队列头部的元素,但不移除
4.isEmpty():检查队列是否为空
以下队列的模拟我是借助链表来进行模拟实现


Java中idea也具有Queue队列 但队列是作为一个抽象类 所以
![]()
在实例化对象时需要向上转型
则可进行调用队列的方法:queue.offer();....
3.循环队列
循环队列是队列的一大重点
与队列不同的就是需要考虑队尾与对头的衔接

1.注意队空与队满的判断条件
队空的条件:q.front==q.rear;
队满的条件:(q.rear+1)%MaxSize==q.front;
2.代码详解

三.栈对队列的模拟以及队列对栈的模拟
1.队列对栈的模拟
225. 用队列实现栈 - 力扣(LeetCode)

class MyStack {
Queue<Integer>queue1 ;//申请第一个队列
Queue<Integer>queue2 ;//申请第二个队列
public MyStack() {
queue1=new LinkedList<>();
queue2=new LinkedList<>();
}
public void push(int x) {//在模拟栈入队时 找两个队列中非空的队列
if(!queue1.isEmpty()){
queue1.offer(x);
}
else if(!queue2.isEmpty()){
queue2.offer(x);
}
else{
queue1.offer(x);
}
}
public int pop() {//出队列时将非空队列中size-1个元素入另一个队列中,留下的即为模拟栈该出栈的元素
if(empty()){
return -1;
}
if(!queue1.isEmpty()){
int size=queue1.size();
for(int i=0;i<size-1;i++){
queue2.offer(queue1.poll());
}
return queue1.poll();
}
else{
int size=queue2.size();
for(int i=0;i<size-1;i++){
queue1.offer(queue2.poll());
}
return queue2.poll();
}
}
public int top() {
if(empty()){
return -1;
}
if(!queue1.isEmpty()){
int val=0;
int size=queue1.size();
for(int i=0;i<size;i++){
val=queue1.poll();
queue2.offer(val);
}
return val;
}
else{
int val=0;
int size=queue2.size();
for(int i=0;i<size;i++){
val=queue2.poll();
queue1.offer(val);
}
return val;
}
}
public boolean empty() {
return queue1.isEmpty()&&queue2.isEmpty();
}
}
2.栈对队列的模拟
232. 用栈实现队列 - 力扣(LeetCode)
注意结合栈的特性以两个栈来结合使队列的先进后出成功进行
class MyQueue {
public Stack <Integer> stack1;
public Stack <Integer> stack2;
public MyQueue() {
stack1=new Stack<>();
stack2=new Stack<>();
}
public void push(int x) {
if(empty()){
stack1.push(x);
}
if(stack1.isEmpty()){
stack2.push(x);
}
else{
stack1.push(x);
}
}
public int pop() {
if(empty()){
return -1;
}
if(!stack2.isEmpty()){
return stack2.pop();
}
else{
while(!stack1.isEmpty()){
stack2.push(stack1.pop());
}
return stack2.pop();
}
}
public int peek() {
if(empty()){
return -1;
}
if(stack1.isEmpty()){
int sz=stack2.size();
int num=0;
for(int i=0;i<sz;i++){
num=stack2.pop();
stack1.push(num);
}
return stack1.peek();
}
else{
int sz=stack1.size();
int num=0;
for(int i=0;i<sz;i++){
num=stack1.pop();
stack2.push(num);
}
return stack2.peek();
}
}
public boolean empty() {
return stack1.isEmpty()&&stack2.isEmpty();
}
}

相关文章:
栈和队列(Java)
一.栈(Stack) 1.定义 栈是限定仅在表尾进行插入或删除操作的线性表 一般的表尾称为栈顶 表头称为栈底 栈具有“后进先出”的特点 2.对栈的模拟 栈主要具有以下功能: push(Object item):将元素item压入栈顶。 pop()&am…...
C#设计原则
文章目录 项目地址一、开放封闭原则1.1 不好的版本1.2 将BankProcess的实现改为接口1.3 修改BankStuff类和IBankClient类二、依赖倒置原则2.1 高层不应该依赖于低层模块2.1.1 不好的例子2.1.2 修改:将各个国家的歌曲抽象2.2 抽象不应该依于细节2.2.1 不同的人开不同的车(接口…...
easyfs 简易文件系统
easyfs easyfs 简易文件系统文件系统虚拟文件系统 VFS简易文件系统 easyfs磁盘布局超级块 easyfs 文件系统结构磁盘上的索引结构索引节点Inode 和 DiskInode 之间的关系举例说明读取文件的过程( /hello ) 参考文档 easyfs 简易文件系统 文件系统 常规文…...
【架构论文-1】面向服务架构(SOA)
【摘要】 本文以我参加公司的“生产线数字孪生”项目为例,论述了“面向服务架构设计及其应用”。该项目的目标是构建某车企的数字孪生平台,在虚拟场景中能够仿真还原真实产线的动作和节拍,实现虚实联动,从而提前规避问题ÿ…...
刚刚!更新宁德时代社招Verify测评语言理解数字推理SHL题库、网盘资料、高分答案
宁德时代社招入职的Verify测评主要分为两大块:语言理解和数字推理。语言理解部分包括阅读理解、逻辑填空和语句排序,要求在17分钟内完成30题。数字推理部分包括数字序列、数学问题解决和图表分析,同样要求在17分钟内完成18题。这些测评题目旨…...
C++笔记---智能指针
1. 什么是智能指针 1.1 RALL设计思想 RAII(Resource Acquisition Is Initialization,资源获取即初始化)是一种资源管理类的设计思想,广泛应用于C等支持对象导向编程的语言中。它的核心思想是将资源的管理与对象的生命周期紧密绑定…...
CentOS 7系统中更改YUM源为阿里云的镜像源
引言 更换阿里的镜像源可以带来诸多好处,包括提高下载速度、提升稳定性、同步更新、简化配置、节省带宽资源以及增强系统安全性等。因此,对于使用CentOS系统的用户来说,更换阿里的镜像源是一个值得考虑的选择。 1.备份yum源 mv /etc/yum.r…...
Python酷库之旅-第三方库Pandas(206)
目录 一、用法精讲 961、pandas.IntervalIndex.mid属性 961-1、语法 961-2、参数 961-3、功能 961-4、返回值 961-5、说明 961-6、用法 961-6-1、数据准备 961-6-2、代码示例 961-6-3、结果输出 962、pandas.IntervalIndex.length属性 962-1、语法 962-2、参数 …...
3.4CQU数学实验???
meshgrid 是一个用于生成网格点坐标的函数。它常用于在二维或三维空间中创建坐标网格,用于可视化和数据处理。 在二维情况下,meshgrid 函数接受两个一维数组作为输入,并返回两个二维数组,这两个数组中的元素分别表示了所有可能的…...
Linux(CentOS)开放端口/关闭端口
一、普通用户使用 sudo 操作,开放/关闭端口,80 1、检查端口是否开放 sudo firewall-cmd --zonepublic --query-port80/tcp 2、开放端口 sudo firewall-cmd --zonepublic --add-port80/tcp --permanent 3、重新加载(开放或关闭端口后都需…...
GreenDao适配AGP8.7+
升级配置 工具版本Android StudioLadybug 2024.2.1 Path2AGP8.7.2KPG1.8.21GGP3.3.1明细 classpath "com.android.tools.build:gradle:$agp_version"classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kgp_version"classpath "org.greenrobot:g…...
【前端】Typescript从入门到进阶
以下是 TypeScript 的常用知识点总结,涵盖了从基础到入门的内容,并配有代码示例: 1. TypeScript 基础 1.1 安装和配置 安装 TypeScript 并初始化配置文件: npm install -g typescript tsc --init 1.2 基本类型 TypeScript 提供…...
在 RHEL 8 | CentOS Linux release 8.5.2111上安装 Zabbix 6
1. 备份YUM源文件 cd /etc/yum.repos.d/ mkdir bak mv C* ./bak/ wget -O /etc/yum.repos.d/CentOS-Linux-BaseOS.repo https://mirrors.aliyun.com/repo/Centos-vault-8.5.2111.repo yum clean all yum makecache2. 将 SELinux 设置为宽容模式,如下所示。 sudo s…...
光纤HDMI线怎么连接回音壁?
第一步:准备HDMI线、光纤线(TOSLINK线)、视频源设备、回音壁 第二步:连接HDMI线,找到视频源设备上的HDMI输出口,将HDMI线的一端插入这个接口,再把HDMI线的另一端插入回音壁的HDMI输入口。注意检…...
屏幕后期处理
1、屏幕后期处理效果 屏幕后期处理效果( Screen Post-Processing Effects)是一种在渲染管线的最后阶段应用的视觉效果,允许在场景渲染完成后对最终图像进行各种调整和效果处理,从而增强视觉体验 常见的屏幕后期处理效果有&#x…...
K8资源之endpoint资源EP资源
1 endpoint资源概述 endpoint资源在K8S中用来表s示vc与后端 Pod 之间的连接关系的对象。当创建svc时,svc根据标签是否相同或svc名字是否和ep名字相同,把svc和ip关联上。 删除svc时,会自动的删除同名的ep资源。 2 ep资源和svc的关联测试 […...
微软日志丢失事件敲响安全警钟
NEWS | 事件回顾 最近,全球最大的软件公司之一——微软,遭遇了一场罕见的日志丢失危机。据报告,从9月2日至9月19日,持续长达两周的时间里,微软的多项核心云服务,包括身份验证平台Microsoft Entra、安全信息…...
Qt生成应用程序exe
1. 将工程用MinGW编译器在release模式下编译,生成可执行文件XXX.exe,新建一个文件夹如:F:\Setup\minGW,把exe文件放到这个目录下。 2. 将该编译器的bin文件添加到PATH环境变量里:bin文件路径为:D:\Qt\Qt5.…...
C#中的HttpContent、HttpClientHandle、HttpWebRequest
C#中的HttpContent 在C#中,HttpContent 是 System.Net.Http 命名空间下的一个类,它是 HttpClient 类用来发送和接收HTTP内容的基础。HttpContent 表示HTTP请求或响应的正文内容,并且可以序列化和反序列化数据。 HttpContent 是一个抽象类&a…...
23.网工入门篇--------介绍一下园区网典型组网架构及案例实践
园区网典型组网架构主要分为小型、中型、大型三种类型,以下是详细介绍及相关案例实践: 小型园区网: 架构特点: 用户规模:适用于接入用户数量较少的场景,一般支持几个至几十个用户。覆盖范围:仅限…...
Docker 离线安装指南
参考文章 1、确认操作系统类型及内核版本 Docker依赖于Linux内核的一些特性,不同版本的Docker对内核版本有不同要求。例如,Docker 17.06及之后的版本通常需要Linux内核3.10及以上版本,Docker17.09及更高版本对应Linux内核4.9.x及更高版本。…...
Cursor实现用excel数据填充word模版的方法
cursor主页:https://www.cursor.com/ 任务目标:把excel格式的数据里的单元格,按照某一个固定模版填充到word中 文章目录 注意事项逐步生成程序1. 确定格式2. 调试程序 注意事项 直接给一个excel文件和最终呈现的word文件的示例,…...
【网络安全产品大调研系列】2. 体验漏洞扫描
前言 2023 年漏洞扫描服务市场规模预计为 3.06(十亿美元)。漏洞扫描服务市场行业预计将从 2024 年的 3.48(十亿美元)增长到 2032 年的 9.54(十亿美元)。预测期内漏洞扫描服务市场 CAGR(增长率&…...
ESP32读取DHT11温湿度数据
芯片:ESP32 环境:Arduino 一、安装DHT11传感器库 红框的库,别安装错了 二、代码 注意,DATA口要连接在D15上 #include "DHT.h" // 包含DHT库#define DHTPIN 15 // 定义DHT11数据引脚连接到ESP32的GPIO15 #define D…...
【AI学习】三、AI算法中的向量
在人工智能(AI)算法中,向量(Vector)是一种将现实世界中的数据(如图像、文本、音频等)转化为计算机可处理的数值型特征表示的工具。它是连接人类认知(如语义、视觉特征)与…...
基于Docker Compose部署Java微服务项目
一. 创建根项目 根项目(父项目)主要用于依赖管理 一些需要注意的点: 打包方式需要为 pom<modules>里需要注册子模块不要引入maven的打包插件,否则打包时会出问题 <?xml version"1.0" encoding"UTF-8…...
零基础设计模式——行为型模式 - 责任链模式
第四部分:行为型模式 - 责任链模式 (Chain of Responsibility Pattern) 欢迎来到行为型模式的学习!行为型模式关注对象之间的职责分配、算法封装和对象间的交互。我们将学习的第一个行为型模式是责任链模式。 核心思想:使多个对象都有机会处…...
MySQL中【正则表达式】用法
MySQL 中正则表达式通过 REGEXP 或 RLIKE 操作符实现(两者等价),用于在 WHERE 子句中进行复杂的字符串模式匹配。以下是核心用法和示例: 一、基础语法 SELECT column_name FROM table_name WHERE column_name REGEXP pattern; …...
IoT/HCIP实验-3/LiteOS操作系统内核实验(任务、内存、信号量、CMSIS..)
文章目录 概述HelloWorld 工程C/C配置编译器主配置Makefile脚本烧录器主配置运行结果程序调用栈 任务管理实验实验结果osal 系统适配层osal_task_create 其他实验实验源码内存管理实验互斥锁实验信号量实验 CMISIS接口实验还是得JlINKCMSIS 简介LiteOS->CMSIS任务间消息交互…...
精益数据分析(97/126):邮件营销与用户参与度的关键指标优化指南
精益数据分析(97/126):邮件营销与用户参与度的关键指标优化指南 在数字化营销时代,邮件列表效度、用户参与度和网站性能等指标往往决定着创业公司的增长成败。今天,我们将深入解析邮件打开率、网站可用性、页面参与时…...

