当前位置: 首页 > news >正文

Java栈和队列的实现

目录

一.栈(Stack)

1.1栈的概念

1.2栈的实现及模拟

二.队列(Queue)

2.1队列的概念

2.2队列的实现及模拟 

 2.3循环队列

2.4双端队列(Deque)


一.栈(Stack)

1.1栈的概念

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

 

1.2栈的实现及模拟

public class Test {public static void main(String[] args) {Stack<Integer>s=new Stack();//创建一个空栈s.push(1);//往栈中存入1s.push(2);//2s.push(3);//3s.push(4);//4s.push(5);//5System.out.println(s.size());//有效个数5System.out.println(s.peek());//获取栈顶元素5s.pop();//5出栈System.out.println(s.peek());//此时栈顶元素变为4System.out.println(s.empty());//判断是否为空栈,此时不为空 返回false}
}

 这里我们用自己的方法来模拟实现上述的方法

public class MyStack {int[] elem;int usedSize;public MyStack(){this.elem=new int[10];}public void push(int val){if(isFull()){//扩容elem= Arrays.copyOf(elem,elem.length*2);}elem[usedSize]=val;usedSize++;}public boolean isFull(){return usedSize==elem.length;}public int pop(){if(empty()){return -1;}int oldVal=elem[usedSize-1];usedSize--;return oldVal;}public int peek(){if(empty()){return -1;}return elem[usedSize-1];}public boolean empty(){return usedSize==0;}
}

二.队列(Queue)

2.1队列的概念

队列:只允许在一端进行插入数据操作,在另一端进行删除数据操作的特殊线性表,队列具有先进先出FIFO(First In First Out) 入队列:进行插入操作的一端称为队尾(Tail/Rear) 出队列:进行删除操作的一端称为队头(Head/Front)

 

2.2队列的实现及模拟 

在Java中,Queue是个接口,底层是通过链表实现的

注意:Queue是个接口,在实例化时必须实例化LinkedList的对象,因为LinkedList实现了Queue接口。 

public class Test{public static void main(String[] args) {Queue<Integer>q=new LinkedList<>();q.offer(1);//从队尾入q.offer(2);q.offer(3);q.offer(4);System.out.println(q.size());//有效个数 4System.out.println(q.peek());//获取头元素 1q.poll();//1从队列中出System.out.println(q.peek());//2System.out.println(q.isEmpty());//此时队列不为空,所以返回 false}
}

这里我们进行模拟实现上述方法 

public class MyQueue {static class ListNode{public int val;public ListNode prev;public ListNode next;public ListNode(int val){this.val=val;}}public ListNode head;public ListNode last;public void offer(int val){ListNode node=new ListNode(val);if(head==null){head=last=node;}else{last.next=node;node.prev=last;last=last.next;}}public int poll(){if(head==null){return -1;}int ret=head.val;if(head.next==null){head=last=null;}else{head=head.next;head.prev=null;}return ret;}public int peek(){if(head == null) {return -1;}return head.val;}public boolean isEmpty(){return head==null;}
}

 2.3循环队列

实际中我们有时还会使用一种队列叫循环队列。如操作系统课程讲解生产者消费者模型时可以就会使用循环队列。环形队列通常使用数组实现。

2.4双端队列(Deque)

双端队列(deque)是指允许两端都可以进行入队和出队操作的队列,deque 是 “double ended queue” 的简称。

那就说明元素可以从队头出队和入队,也可以从队尾出队和入队

Deque是一个接口,使用时必须创建LinkedList的对象
 

Deque<Integer> stack = new ArrayDeque<>();//双端队列的线性实现
Deque<Integer> queue = new LinkedList<>();//双端队列的链式实现  

我将在下篇文章详细讲解这两种队列的使用以及相关OJ题 


如果上述内容对您有帮助,希望给个三连谢谢!

 

相关文章:

Java栈和队列的实现

目录 一.栈(Stack) 1.1栈的概念 1.2栈的实现及模拟 二.队列(Queue) 2.1队列的概念 2.2队列的实现及模拟 2.3循环队列 2.4双端队列&#xff08;Deque&#xff09; 一.栈(Stack) 1.1栈的概念 栈:一种特殊的线性表&#xff0c;其 只允许在固定的一端进行插入和删除元素操作…...

我的C++奇迹之旅:内联函数和auto关键推导和指针空值

文章目录 &#x1f4dd;内联函数&#x1f320; 查看内联函数inline方式&#x1f309;内联函数特性&#x1f309;面试题 &#x1f320;auto关键字(C11)&#x1f320; auto的使用细则&#x1f309;auto不能推导的场景 &#x1f320;基于范围的for循环(C11)&#x1f320;范围for的…...

Redis主从集群-主从复制(通俗易懂)

为什么要搭建主从集群&#xff1f; 单节点Redis的并发能力是有上限的&#xff0c;要进一步提高Redis的并发能力&#xff0c;可以搭建主从集群&#xff0c;实现读写分离。一般都是一主多从&#xff0c;主节点负责写数据&#xff0c;从节点负责读数据&#xff0c;主节点写入数据…...

【C++算法竞赛 · 图论】图论基础

前言 图论基础 图的相关概念 图的定义 图的分类 按数量分类&#xff1a; 按边的类型分类&#xff1a; 边权 简单图 度 路径 连通 无向图 有向图 图的存储 方法概述 代码 复杂度 前言 图论&#xff08;Graph theory&#xff09;&#xff0c;是 OI 中的一样很大…...

Java解析实体类的属性和属性注释

前言 获取某个类的属性&#xff08;字段&#xff09;是我们经常都会碰到的&#xff0c;通常我们是通过反射来获取的。 但是有些特殊情况下&#xff0c;我们不仅要获取类的属性&#xff0c;还需要获取属性注释。这种情况下&#xff0c;我们只能通过注解去获取注释。可以自己定…...

机器学习KNN最邻近分类算法

文章目录 1、KNN算法简介2、KNN算法实现2.1、调用scikit-learn库中KNN算法 3、使用scikit-learn库生成数据集3.1、自定义函数划分数据集3.2、使用scikit-learn库划分数据集 4、使用scikit-learn库对鸢尾花数据集进行分类5、什么是超参数5.1、实现寻找超参数5.2、使用scikit-lea…...

分享一个Python爬虫入门实例(有源码,学习使用)

一、爬虫基础知识 Python爬虫是一种使用Python编程语言实现的自动化获取网页数据的技术。它广泛应用于数据采集、数据分析、网络监测等领域。以下是对Python爬虫的详细介绍: 架构和组成:下载器:负责根据指定的URL下载网页内容,常用的库有Requests和urllib。解析器:用于解…...

算法:树形dp(树状dp)

文章目录 一、树形DP的概念1.基本概念2.解题步骤3.树形DP数据结构 二、典型例题1.LeetCode&#xff1a;337. 打家劫舍 III1.1、定义状态转移方程1.2、参考代码 2.ACWing&#xff1a;285. 没有上司的舞会1.1、定义状态转移方程1.2、拓扑排序参考代码1.3、dfs后序遍历参考代码 一…...

SQL语句学习+牛客基础39SQL

什么是SQL&#xff1f; SQL (Structured Query Language:结构化查询语言) 是用于管理关系数据库管理系统&#xff08;RDBMS&#xff09;。 SQL 的范围包括数据插入、查询、更新和删除&#xff0c;数据库模式创建和修改&#xff0c;以及数据访问控制。 SQL语法 数据库表 一个…...

竞赛常考的知识点大总结(五)动态规划

DP问题的性质 动态规划&#xff08;Dynamic Programming&#xff0c;DP&#xff09;是指在解决动态规划问题时所依赖的一些基本特征和规律。动态规划是一种将复杂问题分解为更小子问题来解决的方法&#xff0c;它适用于具有重叠子问题和最优子结构性质的问题。动态规划问题通常…...

如何在 Mac 上恢复已删除的数据

如果您丢失了 Mac 上的数据&#xff0c;请不要绝望。恢复数据比您想象的要容易&#xff0c;并且有很多方法可以尝试。 在 Mac 上遭受数据丢失是每个人都认为永远不会发生在他们身上的事情之一......直到它发生。不过&#xff0c;请不要担心&#xff0c;因为您可以通过多种方法…...

Java笔试题总结

HashSet子类依靠()方法区分重复元素。 A toString(),equals() B clone(),equals() C hashCode(),equals() D getClass(),clone() 答案:C 解析: 先调用对象的hashcode方法将对象映射为数组下标,再通过equals来判断元素内容是否相同 以下程序执行的结果是&#xff1a; class X{…...

github本地仓库push到远程仓库

1.从远程仓库clone到本地 2.生成SSH秘钥&#xff0c;为push做准备 在Ubuntu命令行输入一下内容 [rootlocalhost ~]# ssh-keygen -t rsa < 建立密钥对&#xff0c;-t代表类型&#xff0c;有RSA和DSA两种 Generating public/private rsa key pair. Enter file in whi…...

Error: TF_DENORMALIZED_QUATERNION: Ignoring transform forchild_frame_id

问题 运行程序出现&#xff1a; Error: TF_DENORMALIZED_QUATERNION: Ignoring transform for child_frame_id “odom” from authority “unknown_publisher” because of an invalid quaternion in the transform (0.0 0.0 0.0 0.707) 主要是四元数没有归一化 Eigen::Quatern…...

Linux从入门到精通 --- 2.基本命令入门

文章目录 第二章&#xff1a;2.1 Linux的目录结构2.1.1 路径描述方式 2.2 Linux命令入门2.2.1 Linux命令基础格式2.2.2 ls命令2.2.3 ls命令的参数和选项2.2.4 ls命令选项的组合使用 2.3 目录切换相关命令2.3.1 cd切换工作目录2.3.2 pwd查看当前工作目录2.4 相对路径、绝对路径和…...

Redis常用命令补充和持久化

一、redis 多数据库常用命令 1.1 多数据库间切换 1.2 多数据库间移动数据 1.3 清除数据库内数据 1.4 设置密码 1.4.1 使用config set requirepass yourpassword命令设置密码 1.4.2 使用config get requirepass命令查看密码 二、redis高可用 2.1 redis 持久化 2.1.1 持…...

【记录】海康相机(SDK)二次开发时的错误码

海康相机&#xff08;SDK&#xff09;二次开发时的错误码 在进行海康sdk二次开发的时候&#xff0c;经常碰到各种错误&#xff0c;遂结合官方文档和广大网友的一些经验&#xff0c;把这些错误码记录一下&#xff0c;方便查找。笔者使用的SDK版本是HCNetSDKV6.1.9.4。 错误类型…...

端盒日记Day02

JS 本本本本本地存储 localStorage 作用&#xff1a;可以将数据永久存储在本地&#xff08;用户电脑&#xff09;&#xff0c;除非手动删除&#xff0c;否则关闭页面也会存在 特性&#xff1a;a.可多窗口&#xff08;页面&#xff09;共享&#xff08;同一浏览器可以共享&a…...

考研高数(平面图形的面积,旋转体的体积)

1.平面图形的面积 纠正&#xff1a;参数方程求面积 2.旋转体的体积&#xff08;做题时&#xff0c;若以x为自变量不好计算&#xff0c;可以求反函数&#xff0c;y为自变量进行计算&#xff09;...

选择企业邮箱,扬帆迈向商务新纪元!

企业邮箱和个人邮箱不同&#xff0c;它的邮箱后缀是企业自己的域名。企业邮箱供应商一般都提供手机app、桌面端、web浏览器访问等邮箱使用途径。那么什么是企业邮箱&#xff1f;如何选择合适的企业邮箱&#xff1f;好用的企业邮箱应具备无缝迁移、协作、多邮箱管理等功能。 企…...

2024.3.25力扣每日一题——零钱兑换2

2024.3.25 题目来源我的题解方法一 动态规划 题目来源 力扣每日一题&#xff1b;题序&#xff1a;518 我的题解 方法一 动态规划 给定总金额 amount 和数组 coins&#xff0c;要求计算金额之和等于 amount 的硬币组合数。其中&#xff0c;coins的每个元素可以选取多次&#…...

包子凑数【蓝桥杯】/完全背包

包子凑数 完全背包 完全背包问题和01背包的区别就是&#xff0c;完全背包问题每一个物品能取无限次。 思路&#xff1a;当n个数的最大公约数不为1&#xff0c;即不互质时&#xff0c;有无限多个凑不出来的&#xff0c;即n个数都可以表示成kn&#xff0c;k为常数且不为1。当n个…...

口语 4.6

drop the gun :逃避 radically 极大程度地 vastly cognition&#xff1a;认知能力 flaw缺陷 flawless&#xff1a;没有缺陷 interface&#xff1a;接口&#xff0c;交流处 retain&#xff1a;保留 down the rabbit hole&#xff1a;进入未知领域了 wrap your head aro…...

使用Docker 部署jenkins 实现自动化部署

使用Docker部署jenkins实现自动化部署ruoyi-vue docker jenkinsJava jenkinsfilevue jenkinsfileDockerfile 部署脚本Java Dockerfilenginx Dockerfilenginx-dev.conf 使用docker部署Jenkins&#xff0c;项目: https://gitee.com/y_project/RuoYi-Vue 作为部署项目示范 docker…...

golang语言系列:Web框架+路由 之 Gin

云原生学习路线导航页&#xff08;持续更新中&#xff09; 本文是golang语言学习系列&#xff0c;本篇对Gin框架的基本使用方法进行学习 1.Gin框架是什么 Gin 是一个 Go (Golang) 编写的轻量级 http web 框架&#xff0c;运行速度非常快&#xff0c;如果你是性能和高效的追求者…...

春招百题--堆

一、堆的定义 二、堆&#xff08;优先队列&#xff09; 堆通常用于实现优先队列&#xff08;priority_queue&#xff09;&#xff0c;大顶堆相当于元素按从大到小的顺序出队的优先队列。从使用角度来看&#xff0c;我们可以将“优先队列”和“堆”看作等价的数据结构。 堆的…...

全志A40i android7.1 移植wifi驱动的一般流程

一&#xff0c;问题分析 一般情况下移植一款模组&#xff0c;会涉及到驱动&#xff0c;firmware, hal层&#xff0c;方案端的适配。 下面以RTL8723ds为例详细列出移植的通用步骤。 二&#xff0c;移植步骤 1. 移植Wi-Fi驱动 从RTL原厂或者已经支持的其他把内核版本中获取驱动…...

Qt——Qt绘图之QPainter的使用总结(使用paintEvent实现旋转图片效果)

【系列专栏】:博主结合工作实践输出的,解决实际问题的专栏,朋友们看过来! 《项目案例分享》 《极客DIY开源分享》 《嵌入式通用开发实战》 《C++语言开发基础总结》 《从0到1学习嵌入式Linux开发》 《QT开发实战》 《Android开发实战》...

Day83:服务攻防-开发组件安全JacksonFastJson各版本XStreamCVE环境复现

目录 J2EE-组件Jackson-本地demo&CVE 代码执行 (CVE-2020-8840) 代码执行 (CVE-2020-35728&#xff09; J2EE-组件FastJson-本地demo&CVE FastJson < 1.2.24 FastJson < 1.2.47 FastJson < 1.2.80 (利用条件比较苛刻) J2EE-组件XStream-靶场&CVE …...

【QT+QGIS跨平台编译】056:【pdal_kazhdan+Qt跨平台编译】(一套代码、一套框架,跨平台编译)

点击查看专栏目录 文章目录 一、pdal_kazhdan介绍二、pdal下载三、文件分析四、pro文件五、编译实践一、pdal_kazhdan介绍 pdal_kazhdan 是 PDAL(Point Data Abstraction Library)相关的 Kazhdan 算法的实现。PDAL 是一个用于处理和分析点云数据的开源库,而 Kazhdan 算法通常…...

校园二手交易网站值得做吗/专业培训

贵州大学计算机科学与技术学院计算机科学与技术系上机实验报告课程名称&#xff1a;Linux实验班级&#xff1a;实验日期&#xff1a;姓名&#xff1a;学号&#xff1a;指导教师&#xff1a;实验序号&#xff1a;一实验成绩&#xff1a;一、实验名称Shell编程方法二、实验目的及…...

现在较为常用的网站开发技术/抖音关键词排名查询工具

在平常的开发中&#xff0c;我们经常会遇到JSONObject和Bean的互换&#xff0c;JSONArray和List<Bean>的互换&#xff0c;具体的操作可以看下面的小例子。 1 public class Test2 {3 public static void main(String args[])4 {5 User temp new User();6…...

wordpress快速安装/百度大数据中心

在写项目时&#xff0c;使用到了express-jwt第三方模块&#xff0c;代码如下&#xff0c; expressJWT({ secret:key.secretKey})然后就报了如下错误&#xff0c; 查阅了npm官网后&#xff0c;才知道最新版本的使用不仅要使用参数secret&#xff0c;还需要参数algorithms。当提…...

私做网站名电子章/如何投放网络广告

一&#xff1a; 思想 有时我们要得到问题的解&#xff0c;先从其中某一种情况进行试探&#xff0c;在试探过程中&#xff0c;一旦发现原来的选择是错误的&#xff0c;那么就退回一步重新选择&#xff0c; 然后继续向前试探&#xff0c;反复这样的过程直到求出问题的解。 二&…...

网站可以做哪些内容/搜索引擎营销的概念

在MySQL中&#xff0c;无法在FROM子句中使用select from过程。您可以使用CALL命令&#xff0c;然后可以执行SELECT语句。让我们首先创建一个表&#xff1a;mysql> create table DemoTable2-> (-> CustomerId int NOT NULL AUTO_INCREMENT PRIMARY KEY,-> CustomerN…...

网站侧面菜单展开怎么做/人工智能培训机构

求函数特征&#xff0c;啥是函数特征&#xff0c;就是函数是什么类型&#xff0c;特征是一个专业名词而已 namespace Library1 type Color |Red|Green|Blue type Type0() member type0.method1()printfn"te" //书上代码太多&#xff0c;至此为止我们还没学这么多&…...