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

Java基础 数据结构一【栈、队列】

什么是数据结构

数据结构是计算机科学中的一个重要概念,用于组织和存储数据以便有效地进行访问、操作和管理。它涉及了如何在计算机内存中组织数据,以便于在不同操作中进行查找、插入、删除等操作

数据结构可以看作是一种数据的组织方式,不同的数据结构适用于不同的应用场景,根据操作的需求和效率要求,选择合适的数据结构可以提高算法的执行效率。

1. 栈(Stack)

栈(Stack) 一种具有后进先出(LIFO)特性的数据结构,常用于处理函数调用、表达式求值等。
在这里插入图片描述
代码实现(Java)

import java.util.Arrays;
import java.util.Objects;public class Stack {private static final int DEFAULT_CAPACITY = 10;Object[] objects = new Object[DEFAULT_CAPACITY];int subscript = 0;/*** 将元素压入栈顶* 入栈* @param element 要压入的元素*/@Overridepublic void push(Object element) {ensureCapacity();objects[subscript] = element;subscript ++;}/*** 弹出栈顶元素并返回* 把栈顶元素删除,并返回* 出栈* @return 弹出的栈顶元素, 如果栈为空返回 null*/@Overridepublic Object pop() {if (subscript == 0) {return null;} else {Object obj = objects[--subscript];objects[subscript] = null;return obj;}}/*** 返回栈顶元素,但不弹出* @return 栈顶元素*/@Overridepublic Object peek() {return objects[subscript - 1];}/*** 检查栈是否为空* @return 如果栈为空则返回true,否则返回false*/@Overridepublic boolean isEmpty() {return subscript == 0;}/*** 返回栈中的元素个数* @return 栈中元素的个数*/@Overridepublic int size() {return subscript;}// 扩容private void ensureCapacity() {if (subscript == objects.length) {int newCapacity = objects.length * 2;objects = Arrays.copyOf(objects, newCapacity);}}@Overridepublic String toString() {Object[] tempArrays = new Object[subscript];System.arraycopy(objects, 0, tempArrays, 0, subscript);return Arrays.toString(tempArrays);}@Overridepublic boolean equals(Object obj) {if (obj == null || obj.getClass() != this.getClass()) {return false;}if (obj == this) {return true;}// 判断大小是否相等StackPractice other = (StackPractice) obj; // 对象类型匹配,进行类型转换if (other.size() != this.size()) {return false;}// 比较两个栈的底层数组是否相等。return Arrays.equals(this.objects, other.objects);}@Overridepublic int hashCode() {return Objects.hash(Arrays.hashCode(objects), subscript);}
}

2. 队列(Queue)

一种具有先进先出(FIFO)特性的数据结构,常用于任务调度、广度优先搜索等。
在这里插入图片描述
代码实现(Java)

import java.util.Arrays;
import java.util.Objects;public class QueuePractice extends Queue {private static final int DEFAULT_CAPACITY = 10;Object[] objects = new Object[DEFAULT_CAPACITY];int size = 0;/*** 将元素插入队尾* @param element 要插入的元素*/@Overridepublic void enqueue(Object element) {objects[size] = element;size ++;}/*** 移除并返回队首元素* 删除第一个元素,并返回* @return 队首元素, 如果队列为空时,返回 null*/@Overridepublic Object dequeue() {if (size == 0) {return null;} else {Object obj = objects[0];size --;System.arraycopy(objects, 1, objects, 0, size);return obj;}}/*** 返回队首元素,但不移除* @return 队首元素*/@OverrideObject peek() {return objects[0];}/*** 检查队列是否为空* @return 如果队列为空则返回true,否则返回false*/@Overrideboolean isEmpty() {return size == 0;}/*** 返回队列中的元素个数* @return 队列中元素的个数*/@Overrideint size() {return size;}@Overridepublic String toString() {Object[] tempArrays = new Object[size];System.arraycopy(objects, 0, tempArrays, 0, size);return Arrays.toString(tempArrays);}@Overridepublic boolean equals(Object obj) {if (obj == this) {return true;}if (obj == null || obj.getClass() != this.getClass()) {return false;}// 判断大小是否相等QueuePractice other = (QueuePractice) obj; // 对象类型匹配,进行类型转换if (other.size() != this.size()) {return false;}// 比较两个栈的底层数组是否相等。return Arrays.equals(this.objects, other.objects);}@Overridepublic int hashCode() {return Objects.hash(Arrays.hashCode(objects), size);}
}

相关文章:

Java基础 数据结构一【栈、队列】

什么是数据结构 数据结构是计算机科学中的一个重要概念,用于组织和存储数据以便有效地进行访问、操作和管理。它涉及了如何在计算机内存中组织数据,以便于在不同操作中进行查找、插入、删除等操作 数据结构可以看作是一种数据的组织方式,不…...

Spark on Yarn集群模式搭建及测试

🥇🥇【大数据学习记录篇】-持续更新中~🥇🥇 点击传送:大数据学习专栏 持续更新中,感谢各位前辈朋友们支持学习~ 文章目录 1.Spark on Yarn集群模式介绍2.搭建环境准备3.搭建步骤 1.Spark on Yarn集群模式介…...

vue 简单实验 v-on html事件绑定

1.代码 <script src"https://unpkg.com/vuenext" rel"external nofollow" ></script> <div id"event-handling"><p>{{ message }}</p><button v-on:click"reverseMessage">反转 Message</but…...

c#设计模式-创建型模式 之 原型模式

概述 原型模式是一种创建型设计模式&#xff0c;它允许你复制已有对象&#xff0c;而无需使代码依赖它们所属的类。新的对象可以通过原型模式对已有对象进行复制来获得&#xff0c;而不是每次都重新创建。 原型模式包含如下角色&#xff1a; 抽象原型类&#xff1a;规定了具…...

运放的分类、运放的参数

一、运放的分类 运放按功能分为通用运放与专用运放&#xff08;高速运放、精密运放、低IB运放等&#xff09;。 1.1通用运放 除廉价外&#xff0c;没有任何最优指标的运放。 例&#xff1a;uA741&#xff0c;LM324&#xff0c;TL06X&#xff0c;TL07X、TL08X等 国外知名运放…...

手写数字识别之优化算法:观察Loss下降的情况判断合理的学习率

目录 手写数字识别之优化算法:观察Loss下降的情况判断合理的学习率 前提条件 设置学习率 学习率的主流优化算法 手写数字识别之优化算法:观察Loss下降的情况判断合理的学习率 我们明确了分类任务的损失函数&#xff08;优化目标&#xff09;的相关概念和实现方法&#xff…...

软件工程(二十) 系统运行与软件维护

1、系统转换计划 1.1、遗留系统的演化策略 时至今日,你想去开发一个系统,想完全不涉及到已有的系统,基本是不可能的事情。但是对于已有系统我们有一个策略。 比如我们是淘汰掉已有系统,还是继承已有系统,或者集成已有系统,或者改造遗留的系统呢,都是不同的策略。 技术…...

蓝蓝设计ui设计公司作品--泛亚高科-光伏电站控制系统界面设计

泛亚高科(北京)科技有限公司&#xff08;以下简称“泛亚高科”&#xff09;&#xff0c;一个以实时监控、高精度数值计算为基础的科技公司&#xff0c; 自成立以来&#xff0c;组成了以博士、硕士为核心的技术团队&#xff0c;整合了华北电力大学等高校资源&#xff0c;凭借在电…...

软考高级系统架构设计师系列论文七十:论信息系统的安全体系

软考高级系统架构设计师系列论文七十:论信息系统的安全体系 一、信息系统相关知识点二、摘要三、正文四、总结一、信息系统相关知识点 软考高级信息系统项目管理师系列之四十三:信息系统安全管理...

​Softing dataFEED OPC Suite——助力数字孪生技术发展

一 行业概览 数字孪生技术是充分利用物理模型、传感器更新、运行历史等数据&#xff0c;集成多学科、多物理量、多尺度、多概率的仿真过程&#xff0c;在虚拟空间中完成映射&#xff0c;从而反映相对应的实体装备的全生命周期过程。数字孪生技术已经应用在众多领域&#xff1a…...

LLaMA中ROPE位置编码实现源码解析

1、Attention中q&#xff0c;经下式&#xff0c;生成新的q。m为句长length&#xff0c;d为embedding_dim/head θ i 1 1000 0 2 i d \theta_i\frac{1}{10000^\frac{2i}{d}} θi​10000d2i​1​ 2、LLaMA中RoPE源码 import torchdef precompute_freqs_cis(dim: int, end: i…...

在c++ 20下使用微软的proxy库替代传统的virtual动态多态

传统的virtual动态多态&#xff0c;经常会有下面这样的使用需求&#xff1a; #include <iostream> #include <vector>// 声明一个包含virtual虚函数的基类 struct shape {virtual ~shape() {}virtual void draw() 0; };// 派生&#xff0c;实现virtual虚函数 str…...

Spring MVC:@RequestMapping

Spring MVC RequestMapping属性 RequestMapping RequestMapping&#xff0c; 是 Spring Web 应用程序中最常用的注解之一&#xff0c;主要用于映射 HTTP 请求 URL 与处理请求的处理器 Controller 方法上。使用 RequestMapping 注解可以方便地定义处理器 Controller 的方法来处…...

【vue3+ts项目】配置eslint校验代码工具,eslint+prettier+stylelint

1、运行好后自动打开浏览器 package.json中 vite后面加上 --open 2、安装eslint npm i eslint -D3、运行 eslint --init 之后&#xff0c;回答一些问题&#xff0c; 自动创建 .eslintrc 配置文件。 npx eslint --init回答问题如下&#xff1a; 使用eslint仅检查语法&…...

PHP之ZipArchive打包压缩文件

1、Linux 安装 nginx 安装zlib库 2、使用&#xff0c;目前我这边的需求是。 1、材料图片、单据图片&#xff0c;分别压缩打包到“材料.zip”和“单据.zip”。 2、“材料.zip”和“单据.zip”在压缩打包到“订单.zip” 3、支持批量导出多个订单的图片信息所有订单的压缩文件&…...

面试之快速学习C++14

文章参考&#xff1a;https://zhuanlan.zhihu.com/p/588826142?utm_id0 最近学了一会感慨到找工作好难&#xff0c;上周面试了一家医疗公司&#xff0c;准备攒攒经验但是不去&#xff0c;结果三天了没消息&#xff0c;感觉一面都没过… 本来自傲看不上&#xff0c;结果人家也…...

【算法专题突破】双指针 - 快乐数(3)

目录 1. 题目解析 2. 算法原理 3. 代码编写 写在最后&#xff1a; 1. 题目解析 题目链接&#xff1a;202. 快乐数 - 力扣&#xff08;Leetcode&#xff09; 这道题的题目也很容易理解&#xff0c; 看一下题目给的示例就能很容易明白&#xff0c; 但是要注意一个点&#…...

【javaweb】学习日记Day4 - Maven 依赖管理 Web入门

目录 一、Maven入门 - 管理和构建java项目的工具 1、IDEA如何构建Maven项目 2、Maven 坐标 &#xff08;1&#xff09;定义 &#xff08;2&#xff09;主要组成 3、IDEA如何导入和删除项目 二、Maven - 依赖管理 1、依赖配置 2、依赖传递 &#xff08;1&#xff09;查…...

C++信息学奥赛1144:单词翻转

#include <iostream> #include <string> using namespace std; int main() {string str;// 输入一行字符串getline(cin, str);string arr;for (int i 0; i < str.length(); i){if (str[i] ! ){arr str[i]; // 将非空格字符添加到临时存储的字符串中}else{for…...

qt检查文件夹是否有写权限

Qt 使用如下函数能够判断路径或者文件是否可写&#xff1a; bool QFileInfo::isWritable() const 对于win10系统实测&#xff0c;结果不准确。继续排查&#xff0c;官方文档描述&#xff1a;a&#xff09;如果未启用 NTFS 权限检查&#xff0c;Windows 上的结果将仅反映文件是…...

如何构建高可用的医院信息系统:从单体到微服务的架构演进与实践指南

如何构建高可用的医院信息系统&#xff1a;从单体到微服务的架构演进与实践指南 【免费下载链接】HIS HIS英文全称 hospital information system&#xff08;医疗信息就诊系统&#xff09;&#xff0c;系统主要功能按照数据流量、流向及处理过程分为临床诊疗、药品管理、财务管…...

找靠谱支付通道?这 5 个核心要点 + 筛选技巧必看

想找到靠谱的支付通道&#xff0c;重点关注 5 大核心维度&#xff0c;再配合辅助筛选方法&#xff0c;就能避开大部分坑&#xff1a;资金安全是底线&#xff1a;优先选有央行支付牌照、资金存管合规的机构&#xff0c;避免资金风险。通道稳定是关键&#xff1a;确保交易高峰期不…...

camerax拍照函数

https://developer.android.google.cn/reference/androidx/camera/core/ImageCapture#takePicture(androidx.camera.core.ImageCapture.OutputFileOptions,%20java.util.concurrent.Executor,%20androidx.camera.core.ImageCapture.OnImageSavedCallback)...

查重踩坑血泪史:免费软件、PaPerPass、AIGC率、淘宝旗舰店

规避雷区 最近为了查重&#xff0c;折腾得心力交瘁。多方打听、多次数据对比之后&#xff0c;总结了一些“花钱买教训”的经验&#xff0c;写成几个点分享出来&#xff0c;希望能帮大家少走弯路。千万避雷某多多。 1️⃣ 免费软件的“Pass查重”低于10%还算靠谱 经过多个数据…...

嵌入式开发中段错误的成因分析与GDB调试实战

1. 嵌入式软件段错误概述段错误&#xff08;Segmentation Fault&#xff09;是嵌入式开发中最令人头疼的运行时错误之一。作为一名在嵌入式领域摸爬滚打多年的工程师&#xff0c;我处理过的段错误案例不下百例。每次遇到这种错误&#xff0c;就像在漆黑的迷宫里寻找出口&#x…...

android studio panda3 配置镜像链接失败,求教

安装了android studio panda3 配置镜像如下&#xff1a;buildscript {repositories {maven { url https://maven.aliyun.com/nexus/content/groups/public/ }maven { url https://maven.aliyun.com/repository/public/ }maven { url https://maven.aliyun.com/repository/googl…...

告别重复操作:用快马ai生成脚本自动化vmware运维任务

告别重复操作&#xff1a;用快马AI生成脚本自动化VMware运维任务 作为VMware管理员&#xff0c;每天面对大量重复性运维操作是家常便饭。手动检查虚拟机状态、逐个创建快照、整理资源报表这些工作不仅耗时耗力&#xff0c;还容易出错。最近我发现用InsCode(快马)平台可以快速生…...

vLLM的这个新功能,让我告别了LoRA的重复训练噩梦:动态加载与权限管控实战

vLLM动态LoRA加载&#xff1a;解锁大模型微调的高效运维革命 当基座大模型遇上频繁迭代的垂直场景需求&#xff0c;传统微调方案往往陷入"训练-部署-再训练"的循环泥潭。某金融科技团队曾向我展示他们的困境&#xff1a;每新增一个合规审查模块&#xff0c;就需要重新…...

Whisper JAX时间戳功能:为语音内容添加精准时间标记的终极指南

Whisper JAX时间戳功能&#xff1a;为语音内容添加精准时间标记的终极指南 【免费下载链接】whisper-jax JAX implementation of OpenAIs Whisper model for up to 70x speed-up on TPU. 项目地址: https://gitcode.com/gh_mirrors/wh/whisper-jax Whisper JAX是OpenAI …...

跨品牌机器人数据如何统一?详解RDT-1B的128维动作空间映射技巧

跨品牌机器人数据统一实战&#xff1a;RDT-1B的128维动作空间映射技术解析 当不同品牌的机械臂在实验室里协同完成一套茶艺表演时——六轴工业机器人负责倒水&#xff0c;协作机械臂完成茶叶称重&#xff0c;而仿人五指手执行最后的奉茶动作——这种科幻场景的实现核心&#xf…...