数据结构——队列和栈(介绍、类型、Java手搓实现循环队列)

我是一个计算机专业研0的学生卡蒙Camel🐫🐫🐫(刚保研)
记录每天学习过程(主要学习Java、python、人工智能),总结知识点(内容来自:自我总结+网上借鉴)
希望大家能一起发现问题和补充,也欢迎讨论👏👏👏

文章目录

  • 队列
    • 队列介绍
    • 队列类型
      • 1. 线性队列(Linear Queue)
      • 2. 循环队列(Circular Queue)
      • 3. 优先队列(Priority Queue)
      • 4. 双端队列(Deque, Double-ended Queue)
    • 自定义循环队列Java代码手搓实现🖊️
    • Java中的Queue
    • 栈介绍

队列

队列介绍

队列(Queue)是一种遵循先进先出原则(FIFO, First In First Out)的数据结构(可以用数组或者链表实现),意味着最早添加到队列中的元素将是最先被移除的。这种特性使得队列在很多场景中非常有用,例如任务调度、缓冲处理等。

img

访问:O(n)//最坏情况
插入删除:O1//后端插入前端删除元素

队列类型

使用数组实现举例:

1. 线性队列(Linear Queue)

最简单的队列形式,具有固定的前端和后端。

2. 循环队列(Circular Queue)

一种优化后的线性队列,其中最后一个位置连接到第一个位置,形成环形结构,从而更高效地利用存储空间。

3. 优先队列(Priority Queue)

队列中的每个元素都有一个关联的优先级,出队时总是移除具有最高优先级的元素(一般使用堆实现)。Java 中提供了 PriorityQueue 类来实现这一功能。
在这里插入图片描述

4. 双端队列(Deque, Double-ended Queue)

允许在两端进行插入和删除操作,既可以在前端也可以在后端执行入队和出队操作。Java 提供了 Deque 接口以及它的多个实现类如 ArrayDequeLinkedList

自定义循环队列Java代码手搓实现🖊️

img

/*** @author:Camel* @date:2025/1/17* @description:循环队列*/
public class CircularQueue<T> {private T[] elements; // 存储队列元素的数组private int front;    // 队首指针private int rear;     // 队尾指针private int capacity; // 队列的最大容量private int count;    // 当前队列中的元素数量// 构造函数初始化public CircularQueue(int capacity) {this.capacity = capacity;this.front = 0;this.rear = -1;this.count = 0;this.elements = (T[]) new Object[capacity];}// 入队操作public boolean enqueue(T element) {if (isFull()) {return false; // 队列已满}rear = (rear + 1) % capacity;elements[rear] = element;count++;return true;}// 出队操作public T dequeue() {if (isEmpty()) {return null; // 队列为空}T item = elements[front];elements[front] = null; // 可选:帮助垃圾回收front = (front + 1) % capacity;count--;return item;}// 查看队首元素public T peek() {if (isEmpty()) {return null;}return elements[front];}// 检查队列是否为空public boolean isEmpty() {return count == 0;}// 检查队列是否已满public boolean isFull() {return count == capacity;}// 获取队列大小public int size() {return count;}// 打印队列内容public void printQueue() {if (isEmpty()) {System.out.println("Queue is empty");return;}for (int i = 0, index = front; i < count; i++, index = (index + 1) % capacity) {System.out.print(elements[index] + " ");}System.out.println();}
}

Java中的Queue

Queue接口:

img

方法名签名说明
addboolean add(E e)将指定元素插入队列(如果立即可用),成功时返回true;如果队列已满,则抛出IllegalStateException
offerboolean offer(E e)将指定元素插入队列(如果立即可用),成功时返回true;如果队列已满,则返回false
removeE remove()检索并移除队列头部元素;如果队列为空,则抛出NoSuchElementException
pollE poll()检索并移除队列头部元素;如果队列为空,则返回null
elementE element()检索但不移除队列头部元素;如果队列为空,则抛出NoSuchElementException
peekE peek()检索但不移除队列头部元素;如果队列为空,则返回null

栈介绍

栈和队列相似,只不过栈按照 后进先出(LIFO, Last In First Out) 的原理运作。在栈中,push 和 pop 的操作都发生在栈顶。

栈常用一维数组或链表来实现,用数组实现的栈叫作 顺序栈 ,用链表实现的栈叫作 链式栈

img

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

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

相关文章

python http server运行Angular 单页面路由时重定向,解决404问题

问题 当Angular在本地ng server运行时候&#xff0c;可以顺利访问各级路由。 但是运行ng build后&#xff0c;在dist 路径下的打包好的额index.html 必须要在服务器下运行才能加载。 在服务器下我们第一次访问路由页面时是没有问题的&#xff0c;但是尝试刷新页面或手动输入路…

SQL表间关联查询详解

简介 本文主要讲解SQL语句中常用的表间关联查询方式&#xff0c;包括&#xff1a;左连接&#xff08;left join&#xff09;、右连接&#xff08;right join&#xff09;、全连接&#xff08;full join&#xff09;、内连接&#xff08;inner join&#xff09;、交叉连接&…

Android Jni(一) 快速使用

文章目录 Android Jni&#xff08;一&#xff09; 快速使用1、 环境配置下载 NDK2、右键 add c to module3、创建一个 native 方法&#xff0c;并更具提示&#xff0c;自动创建对应的 JNI 实现4、实现对应 Jni 方法5、static loadLibrary6、调用执行 遇到的问题1、[CXX1300] CM…

【HarmonyOS之旅】基于ArkTS开发(二) -> UI开发之常见布局

目录 1 -> 自适应布局 1.1 -> 线性布局 1.1.1 -> 线性布局的排列 1.1.2 -> 自适应拉伸 1.1.3 -> 自适应缩放 1.1.4 -> 定位能力 1.1.5 -> 自适应延伸 1.2 -> 层叠布局 1.2.1 -> 对齐方式 1.2.2 -> Z序控制 1.3 -> 弹性布局 1.3.1…

物联网网关Web服务器--Boa服务器移植与测试

1、Boa服务器介绍 BOA 服务器是一个小巧高效的web服务器&#xff0c;是一个运行于unix或linux下的&#xff0c;支持CGI的、适合于嵌入式系统的单任务的http服务器&#xff0c;源代码开放、性能高。 Boa 嵌入式 web 服务器的官方网站是http://www.boa.org/。 特点 轻量级&#x…

tomcat状态一直是Exited (1)

docker run -di -p 80:8080 --nametomcat001 你的仓库地址/tomcat:9执行此命令后tomcat一直是Exited(1)状态 解决办法&#xff1a; 用以下命令创建运行 docker run -it --name tomcat001 -p 80:8080 -d 你的仓库地址/tomcat:9 /bin/bash最终结果 tomcat成功启动

三天急速通关Java基础知识:Day1 基本语法

三天急速通关JAVA基础知识&#xff1a;Day1 基本语法 0 文章说明1 关键字 Keywords2 注释 Comments2.1 单行注释2.2 多行注释2.3 文档注释 3 数据类型 Data Types3.1 基本数据类型3.2 引用数据类型 4 变量与常量 Variables and Constant5 运算符 Operators6 字符串 String7 输入…

表单中在不设置required的情况下在label前加*必填标识

参考:https://blog.csdn.net/qq_55798464/article/details/136233718 需求&#xff1a;在发票类型前面添加*必填标识 我最开始直接给发票类型这个表单类型添加了验证规则required:true&#xff0c;问题来了&#xff0c;这个发票类型它是有默认值的&#xff0c;所以我点击保存…

2025寒假备战蓝桥杯01---朴素二分查找的学习

文章目录 1.暴力方法的引入2.暴力解法的思考 与改进3.朴素二分查找的引入4.朴素二分查找的流程5.朴素二分查找的细节6.朴素二分查找的题目 1.暴力方法的引入 对于下面的这个有序的数据元素的组合&#xff0c;我们的暴力解法就是挨个进行遍历操作&#xff0c;一直找到和我们的这…

ROS机器人学习和研究的势-道-术-转型和变革的长期主义习惯

知易行难。说说容易做到难。 例如&#xff0c;不受成败评价影响&#xff0c;坚持做一件事情10年以上&#xff0c;专注事情本身。 机器人专业不合格且失败讲师如何让内心保持充盈的正能量&#xff08;节选&#xff09;-CSDN博客 时间积累 注册20年。 创作历程10年。 创作10年…

渗透测试之XEE[外部实体注入]漏洞 原理 攻击手法 xml语言结构 防御手法

目录 原理 XML语言解释 什么是xml语言&#xff1a; 以PHP举例xml外部实体注入 XML语言结构 面试题目 如何寻找xxe漏洞 XEE漏洞修复域防御 提高版本 代码修复 php java python 手动黑名单过滤(不推荐) 一篇文章带你深入理解漏洞之 XXE 漏洞 - 先知社区 原理 XXE&…

BUUCTF_Web([GYCTF2020]Ezsqli)

1.输入1 &#xff0c;正常回显。 2.输入1 &#xff0c;报错false&#xff0c;为字符型注入&#xff0c;单引号闭合。 原因&#xff1a; https://mp.csdn.net/mp_blog/creation/editor/145170456 3.尝试查询字段&#xff0c;回显位置&#xff0c;数据库&#xff0c;都是这个。…

react使用react-redux状态管理

1、安装 npm install react-redux2、创建store.js import { createStore } from redux;// 定义初始状态 const initialState {counter: 888 };// 定义 reducer 函数&#xff0c;根据 action 类型更新状态 function reducer(state initialState, action) {switch (action.ty…

JAVA使用自定义注解,在项目中实现EXCEL文件的导出

首先定义一个注解 Retention(RetentionPolicy.RUNTIME) Target(ElementType.FIELD) public interface Excel {/*** 导出时在excel中排序*/int sort() default Integer.MAX_VALUE;/*** 导出到Excel中的名字.*/String name() default "";/*** 首行字段的批注*/String …

【2024年华为OD机试】 (B卷,100分)- 金字塔,BOSS的收入(Java JS PythonC/C++)

一、问题描述 微商模式收入计算 题目描述 微商模式中&#xff0c;下级每赚 100 元就要上交 15 元。给定每个级别的收入&#xff0c;求出金字塔尖上的人的收入。 输入描述 第一行输入 N&#xff0c;表示有 N 个代理商上下级关系。接下来输入 N 行&#xff0c;每行三个数&am…

光伏储能交直流微电网Matlab/Simulink仿真模型

博士毕业后项目和课题的交接工作也都基本上结束了&#xff0c;之前从20年我博一开始创作的博客&#xff0c;我也将从25年伊始重新进行更新&#xff0c;在保留原有内容的基础上&#xff0c;在对现如今的研究热点进行补充&#xff0c;希望能为各位校友提供一定的研究思路。首先是…

Windows中安装RabbitMQ

安装Erlang 下载地址&#xff1a;https://www.erlang.org/downloads 配置环境变量 变量名&#xff1a;ERLANG_HOME 变量值&#xff1a;D:\tools\Erlang-27.2 Path&#xff1a;%ERLANG_HOME%\bin 验证配置是否成功 erl 安装RabbitMQ 下载地址&#xff1a;https://www.rabbitm…

线性代数概述

矩阵与线性代数的关系 矩阵是线性代数的研究对象之一&#xff1a; 矩阵&#xff08;Matrix&#xff09;是一个按照长方阵列排列的复数或实数集合&#xff0c;是线性代数中的核心概念之一。矩阵的定义和性质构成了线性代数中矩阵理论的基础&#xff0c;而矩阵运算则简洁地表示和…

2024年度总结:从后端Java到全栈成长的蜕变

目录 前言1. 用数据与实践书写成长篇章2. 技术与生活的双重蜕变3. 技术的进阶与生活的绽放 前言 今年是我入行的第十年&#xff0c;也是记录在CSDN平台上的第五年。这五年来&#xff0c;我始终坚持记录成长的点滴&#xff0c;将个人事业与博客创作紧密相连。一路走来&#xff0…

关于new和delete的匹配问题

目录 引入 原理 引入 大家先看如下代码&#xff1a; class A { private:int _a 0; };int main() {A* arr1 new A[10];delete arr1;return 0; } 可以发现这里new了一个数组但却用delete释放。先看运行结果&#xff1a; 可以看到程序正常结束并没有崩 &#xff0c;别急我们…