Java学习苦旅(十七)——栈和队列

本篇博客将详细讲解Java中的栈和队列。

文章目录

    • 概念
    • Java中Stack常用方法
    • 代码实现
  • 队列
    • 概念
    • 队列常用方法对比
      • Queue
      • Deque
    • 代码实现Queue
  • 结尾

概念

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

压栈:栈的插入操作叫做进栈/压栈/入栈,入数据在栈顶

出栈:栈的删除操作叫做出栈,出数据在栈顶

image-20220301134330322

Java中Stack常用方法

方法解释
E push(E item)压栈
E pop()出栈
E peek()查看栈顶元素
boolean empty()判断栈是否为空

代码实现

使用顺序表实现push(),pop(),peek()

import java.util.*;public class MyStack {public int[] elem;public int usedSize;public MyStack() {this.elem = new int[5];}public void push(int val) {if(isFUll()) {this.elem = Arrays.copyOf(this.elem,2*this.elem.length);}this.elem[this.usedSize] = val;this.usedSize++;}public boolean isFUll() {return this.usedSize == this.elem.length;}public int pop() {if (isEmpty()) {throw new RuntimeException("栈为空");}int oldVal = this.elem[usedSize-1];this.usedSize--;return oldVal;}public boolean isEmpty() {return this.usedSize == 0;}public int peek() {if (isEmpty()) {throw new RuntimeException("栈为空");}return this.elem[usedSize-1];}
}

队列

概念

队列:只允许在一端进行插入数据操作,在另一端进行删除数据操作的特殊线性表,队列具有先进先出FIFO(First In First Out)。

入队列:进行插入操作的一端称为队尾。

出队列:进行删除操作的一端称为队头。

image-20220301155409751

队列常用方法对比

Queue

错误处理抛储异常返回特殊值
入队列add(e)offer(e)
出队列remove()poll()
队首元素element()peek()

Deque

头部/尾部头部元素(队首)尾部元素(队尾)
错误处理抛出异常返回特殊值抛出异常返回特殊值
入队列addFirst(e)offerFirst(e)addLast(e)offerLast(e)
出队列removeFirst()pollFirst()removeLast()pollLast()
获取元素getFirst()peekFirst()getLast()peekLast()

代码实现Queue

class Node {public int val;public Node next;public Node(int val) {this.val = val;}
}public class MyQueue {public Node head;public Node last;/*** 尾插法* @param val*/public void offer(int val) {Node node = new Node(val);if (head == null) {head = node;last = node;} else {last.next = node;last = last.next;}}public int poll() {if (isEmpty()) {throw new RuntimeException("队列为空");}int oldVal = head.val;this.head = head.next;return oldVal;}public boolean isEmpty() {return this.head == null;}public int peek() {if (isEmpty()) {throw new RuntimeException("队列为空");}return head.val;}
}

结尾

本篇博客到此结束。
上一篇博客:Java学习苦旅(十六)——List
下一篇博客:Java学习苦旅(十八)——详解Java中的二叉树

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

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

相关文章

惊呆:RocketMQ顺序消息,是“4把锁”实现的(顺序消费)

尼恩说在前面 在40岁老架构师 尼恩的读者交流群(50)中,最近有小伙伴拿到了一线互联网企业如阿里、滴滴、极兔、有赞、希音、百度、网易、美团的面试资格,遇到很多关于RocketMQ 的、很重要的面试题: 如何保证RocketMQ消息有序? Ro…

应用层网络协议

tags: [“计算机网络”] descripution: “学习应用层的一些常用协议” 网络协议:约定的信息传输的格式,如几个字节是消息头、消息头记录什么信息之类的;c/s架构:不一定是两台计算机,而是两个应用、两个端口工具&#…

poium测试库之JavaScript API封装原理

为什么要封装JavaScript的API? 因为有些场景下Selenium提供的API并不能满足我们需求。比如,滑动浏览滚动条,控制元素的显示/隐藏,日历控件的操作等,都可以通过JavaScrip实现,而且Selenium为我们提供了 exe…

教你直接在 Midjourney 网站上创建图像

经过一年多的工作和使用 Midjourney 的乐趣,我们终于能够直接在网站上生成图像。许多以前没有使用过 Discord 的人对于只能在 Discord 上创建图像并不满意。现在,几乎所有人的等待终于结束了。 直接在 Midjourney 网站上生成图像 David Holz 在 Discor…

SSM电影售票管理系统----计算机毕业设计

项目介绍 管理员角色包含以下功能: 管理员登陆,管理员用户管理,新闻公告增删改查,电影类型增删改查,影院信息增删改查,电影信息增删改查,订单查询,电影评价管理等功能。 用户角色包含以下功能: 用户首页,用户登录,查看电影详情,加入购物车,下单电影票,…

数据结构:图详解

图的存储方式 邻接矩阵 首先先创建图,这一个我们可以使用邻接矩阵或者邻接链 表来进行存储,我们要实现的无向图的创建,我们先创建 一个矩阵尺寸为n*n,n为图中的节点个数如图所示 可以看出图中有5个结点,那我们创建…

基于web3.js和ganache实现智能合约调用

目的:智能合约发布到本地以太坊模拟软件ganache并完成交互 准备工作: web3.jsganache模拟软件 ganache参数配置 从ganache获取一个url,和一个账号的地址, url直接使用图中的rpc server位置的数据即可 账号address从下列0x开头…

SpringBoot中动态注册接口

1. 说明 接口注册,使用RequestMappingHandlerMapping来实现mybatis中动态执行sql使用github上的SqlMapper工具类实现 2. 核心代码片段 以下代码为spring动态注册接口代码示例 Autowired private RequestMappingHandlerMapping requestMappingHandlerMapping;publ…

进程控制-操作系统

1. 进程概述 进程和程序的区别:程序和进程是两个不同的概念,他们的状态,占用的系统资源都是不同的。 程序:就是磁盘上的可执行文件文件, 并且只占用磁盘上的空间,是一个静态的概念。进程:被执行之后的程序叫做进程&a…

Maven之依赖的传递

问题导入 1. 依赖传递 A依赖B,B依赖C,A是否依赖于C呢?–A依赖于C 依赖具有传递性 路径优先:当依赖中出现相同的的资源时,层级越深,优先级越低,层级越浅,优先级越高 声明优先&…

nacos 2.* 部署在linux服务器无法注册问题

通过sdk注册代码 报错 Exception in thread "main" ErrCode:-401, ErrMsg:Client not connected, current status:STARTING at com.alibaba.nacos.common.remote.client.RpcClient.request(RpcClient.java:639) at com.alibaba.nacos.common.remote.client…

【网络编程】——基于TCP协议实现回显服务器及客户端

个人主页:兜里有颗棉花糖 欢迎 点赞👍 收藏✨ 留言✉ 加关注💓本文由 兜里有颗棉花糖 原创 收录于专栏【网络编程】【Java系列】 本专栏旨在分享学习网络编程的一点学习心得,欢迎大家在评论区交流讨论💌 目录 一、TCP实…

AI无人直播系统怎么样?三点说明

近年来,因为科技的高速进步,不断涌现出了越来越多的新技术和创新事物,它们以其独特的方式取代了我们的许多传统做法,从而彻底解放了我们的双手。在这股潮流中,无人直播作为一种创新形式,使得直播变得更加简…

【容器】K8s RBAC介绍

认识RBAC RBAC(基于角色的访问控制)是一种将权限分配给用户和服务的方法,基于他们的角色来确定他们可以访问和修改的资源。K8s使用RBAC作为来访请求鉴权的机制之一。 场景:访问K8s接口时的认证和鉴权 某些场景下,我…

面试算法98:路径的数目

题目 一个机器人从mn的格子的左上角出发,它每步要么向下要么向右,直到抵达格子的右下角。请计算机器人从左上角到达右下角的路径的数目。例如,如果格子的大小是33,那么机器人从左上角到达右下角有6条符合条件的不同路径。 分析…

rabbitmq延时队列相关配置

确保 RabbitMQ 的延时消息插件已经安装和启用。你可以通过执行以下命令来安装该插件: rabbitmq-plugins enable rabbitmq_delayed_message_exchange 如果提示未安装,以下是安装流程: 查看mq版本: 查看自己使用的 MQ(…

全网最全丨傻瓜式Fiddler教程大全丨从安装到抓包

前言 在我们做接口测试的时候,经常需要验证发送的消息是否正确,或者在出现问题的时候,查看手机客户端发送给server端的包内容是否正确,就需要用到抓包工具。 今天,给大家带来最常用的Fiddler的傻瓜式教程大全——从安…

九、综合实例:修改用户资料(Qt5 GUI系列)

目录 一、设计需求 二、实现代码 三、代码解析 四、总结 一、设计需求 设计一个修改用户资料功能的对话框&#xff0c;要求包含基本信息、联系方式、详细资料的编辑和修改。本实例只实现界面。 二、实现代码 导航页面&#xff1a; //添加的头文件 #include <QStacked…

深入理解Python中的二分查找与bisect模块

&#x1f497;&#x1f497;&#x1f497;欢迎来到我的博客&#xff0c;你将找到有关如何使用技术解决问题的文章&#xff0c;也会找到某个技术的学习路线。无论你是何种职业&#xff0c;我都希望我的博客对你有所帮助。最后不要忘记订阅我的博客以获取最新文章&#xff0c;也欢…

安装Cygwin的包管理器apt-cyg并安装tree命令

文章目录 一、从官网添加必要软件包1. 安装2. 检查 二、安装apt-cyg1. 下载安装2.修复 三、安装tree命令1. 安装2.检验 一、从官网添加必要软件包 1. 安装 因为第一次安装cygwin时走的都是默认选项&#xff0c;所以这里是二次添加额外包。 打开官网&#xff0c;下载安装程序。…