数组模拟队列思路分析及代码实现

Java 数据结构之队列(Queue)详解 但需要注意的是,由于数组的容量是固定的,当队列已满时,无法再添加新的元素,除非进行元素的出队操作。通过enqueue()方法将元素入队,dequeue()方法将元素出队,peek()方法返回队列头部元素,size()方法返回队列当前元素个数,isEmpty()方法和isFull()方法检查队列是否为空或已满。Deque接口还提供了一些其他方法,如size()用于返回双端队列中的元素个数,isEmpty()用于判断双端队列是否为空,clear()用于清空双端队列中的所有元素等。 阅读详情

数组模拟队列

队列

  1. 队列是一个有序列表,可以用数组或链表来实现。
  2. 遵循先入先出原则。即:先存入队列的数据,要先取出来。

数组模拟思路分析

  • 队列本身是有序列表,若使用数组的结构来存储队列的数据,则队列数组的声明如下图,其中maxSize是该队列的最大容量。
  • 因为队列的输出、输入是分别从前后端来处理,因此需要两个变量front及rear分别记录队列前后端的下标,front会随着数据输出而改变,而rear则是随着数据输入而改变。
    在这里插入图片描述
  • 当我们将数据存入队列时称为“addQueue”,addQueue的处理步骤需要两个:
  1. 将尾指针后移:rear+1,当front==rear(空)
  2. 若尾指针rear小于队列的最大下标maxSize-1,则将数据存入rear所指的数组元素中,否则无法存入数据。rear==maxSize(队列满)

代码实现

package com.queue;

import java.util.Queue;
import java.util.Scanner;

public class ArrayQueueDemo {

	public static void main(String[] args) {
		// 测试
		// 创建一个队列
		ArrayQueue queue = new ArrayQueue(3);
		char key = ' ';// 接受用户输入
		Scanner scanner = new Scanner(System.in);
		boolean loop = true;
		// 输出一个菜单
		while (loop) {
			System.out.println("s(show):显示队列");
			System.out.println("e(exit):退出程序");
			System.out.println("a(add):添加数据到队列");
			System.out.println("g(get):从队列取出数据");
			System.out.println("h(head):查看队列头的数据");
			key = scanner.next().charAt(0);// 接收一个字符
			switch (key) {
			case 's':
				queue.showQueue();
				break;
			case 'a':
				System.out.println("输入一个数");
				int value = scanner.nextInt();
				queue.addQueue(value);
				break;
			case 'g':// 取出数据
				try {
					int res = queue.getQueue();
					System.out.printf("取出的数据是%d\n", res);
				} catch (Exception e) {
					System.out.println(e.getMessage());
				}
				break;
			case 'h':// 查看队列头数据
				try {
					int res = queue.headQueue();
					System.out.printf("取出的头数据是%d\n", res);
				} catch (Exception e) {
					System.out.println(e.getMessage());
				}
				break;
			case 'e':// 退出程序
				scanner.close();
				loop = false;
				break;
			default:
				break;
			}
		}
		System.out.println("程序退出!!");
	}

}

// 使用数组模拟队列—编写一个ArrayQueue类
class ArrayQueue {
	private int maxSize;// 表示数组最大容量
	private int front;// 队列头
	private int rear;// 队列尾
	private int[] arr;// 该数组用于存放数据,模拟队列

	// 创建队列的构造器
	public ArrayQueue(int arrMaxSize) {
		maxSize = arrMaxSize;
		arr = new int[maxSize];
		front = -1; // 指向队列头部,分析出front是指向队列头的前一个位置
		rear = -1; // 指向队列尾,指向队列尾的数据(即就是队列最后一个数据)
	}

	// 判断队列是否满
	public boolean isFull() {
		return rear == maxSize - 1;
	}

	// 判断队列是否为空
	public boolean isEmpty() {
		return rear == front;
	}

	// 添加数据到队列
	public void addQueue(int n) {
		// 判断队列是否为满
		if (isFull()) {
			System.out.println("队列满,不能加人数据");
			return;
		}
		rear++;// 让rear后移
		arr[rear] = n;
	}

	// 获取队列数据,出队列
	public int getQueue() {
		// 判断队列是否为空
		if (isEmpty()) {
			// 通过抛出异常
			throw new RuntimeException("队列空,不能取数据");
		}
		front++;// front后移
		return arr[front];
	}

	// 显示队列的所有数据
	public void showQueue() {
		// 遍历
		if (isEmpty()) {
			System.out.println("队列空的,没有数据");
			return;
		}
		for (int i = 0; i < arr.length; i++) {
			System.out.printf("arr[%d]=%d\n", i, arr[i]);
		}
	}

	// 显示队列的头数据,注意不是取数据
	public int headQueue() {
		// 判断
		if (isEmpty()) {
			// 通过抛出异常
			throw new RuntimeException("队列空,没有数据");
		}
		return arr[front + 1];
	}
}

004.环形队列的原理和代码实现 <!-- TOC --> <ul> <li><a href="#1-%E6%95%B0%E7%BB%84%E6%A8%A1%E6%8B%9F%E7%8E%AF%E5%BD%A2%E9%98%9F%E 阅读详情

相关推荐

实现数组队列算法(Java)

数组队列的基本思路是使用一个固定大小的数组来存储元素,并使用两个指针(front和rear)来标识队列的头部和尾部。数组队列是一种基于数组实现的队列数据结构,它具有先进先出(FIFO)的特性。在本篇文章中,我将详细介绍如何使用Java编写一个简单的数组队列,并提供相应的源代码。队列已满,无法入队!队列已满,无法入队!队列已满,无法入队!队列为空,无法出队!队列已满,无法入队!队列为空,无法出队!队列已满,无法入队!队列为空,无法出队!队列已满,无法入队!队列已满,无法入队!队列已满,无法入队!

DevRevolt的博客 173

Java数据结构--队列(基于链表+数组)

我们在实现队列的代码之前,先来了解一下Java API中Queue类的方法摘要,要知道它是如何创建使用的。

m0_74808313的博客 910

java:利用数组实现队列(附完整源码)

java:利用数组实现队列(附完整源码)

希望我的博客,能帮上你解决学习中工作中所遇到的问题 435

数组实现队列 详细讲解(java)

数组实现队列 详细讲解 队列的介绍 队列的一个使用场景 银行排队的案例 数组模拟队列的思路: 1、定义一个数组 arr[maxSize] 作为该队列 2、rear定义为队尾指针 3、front定义为对头指针 4、入队addQueue,将队尾指针往后移,rear+1的情况下,要判断队列的元素是否已满,已满的条件为rear=maxSize-1; 5、出队outQueue,将队头的元素往后移,front+1的情况下,要判断队列的元素是否为空,为空的条件为rear=front; 代码实现 package c

舒克日记的博客 2371

Ubuntu 22.04下GNU Radio 3.10全家桶编译避坑实录:从UHD、VOLK到WiFi收发模块gr-ieee802-11

本文详细介绍了在Ubuntu 22.04系统下编译安装GNU Radio 3.10全家桶的完整流程,包括UHD驱动、VOLK优化库以及WiFi信号处理模块gr-ieee802-11的集成。通过逐步指导解决版本兼容性和依赖问题,帮助研究人员快速搭建高效的软件定义无线电开发环境,特别适合使用USRP设备进行无线通信研究的开发者。

weixin_30825199的博客 446

晶振(晶体振荡器)测试方法详解

晶振测试方法分为无源和有源两种类型。无源晶振(两脚)需用示波器测试波形,重点关注正弦波形状、200mV-1.5Vpp幅值和频率精度;有源晶振(四脚)通电后直接输出方波。测试要点包括:示波器使用10X探头、AC耦合,带宽需5倍于晶振频率;万用表可初筛短路/开路;替换法是工程最有效方法。常见故障排查顺序:供电→复位→焊接→型号→负载电容→波形观察→更换晶振→MCU配置。负载电容需按公式计算匹配,示波器观察是核心测试手段。

jiujiujinyuxi的博客 923

数据结构与算法(Java版) | 数组模拟队列的思路分析与代码实现

上一讲我们讲过,队列既可以用数组来实现,也可以用链表来实现,但由于我们比较熟悉数组这种结构,所以这里我会先给大家讲一下数组这种实现方式,至于链表这种实现方式,那就以后有机会再说吧!队列,它本身就是一个有序列表,且其若是使用数组这种结构来存储它里面的数据的话,则队列数组的声明就应该是如下图所示的这个样子,其中maxSize就是该队列的最大容量。上面这张示意图,大家应该还有些印象吧,你可千万别跟我说不熟悉啊,因为我上一讲就给大家讲过了。从以上示意图中,我们。。。

李阿昀的博客 1203

《小白入门:无人机电调 ESC 的 PWM 接口特性、主流协议与使用指南》

电调是无人机的 “动力中枢”,其 PWM 接口是入门的基础,而 SBUS、DroneCAN 等协议则代表了更高阶的控制方式。小白学习时,需先掌握 PWM 的基本特性和连接方法,再根据场景选择合适的协议,同时严格遵守使用注意事项(如电源匹配、校准步骤、安全操作)。随着实践深入,逐步理解 “协议差异” 和 “系统协同”,才能让无人机更稳定、安全地飞行。

bother3000的博客 3766

数据结构和算法笔记_06、数组模拟队列的思路分析、代码实现

目录 3.2.3数组模拟队列思路 代码实现 3.2.3数组模拟队列思路 队列本身是有序列表,若使用数组的结构来存储队列的数据,则队列数组的声明如下图, 其中 maxSize 是该队列的最大容量。 因为队列的输出、输入是分别从前后端来处理,因此需要两个变量 front 及 rear 分别记录队列前后端的下标,front 会随着数据输出而改变,而 rear 则是随着数据输入而改变,如图所示: 当我们将数据存入队列时称为”addQueue”,addQueue 的处理需...

鲁迷那的专栏—坚持实践后再写出来! 180

深入解析EtherCAT通讯DS402协议下的伺服电机控制模式选择与配置

本文深入解析了EtherCAT通讯DS402协议下的伺服电机控制模式选择与配置,详细介绍了六种核心控制模式(如PPM、CSP、CSV、CST)的应用场景及实战技巧。通过EtherCAT和DS402协议的高效配合,实现工业自动化中伺服电机的精准控制,提升设备性能与稳定性。

h0i1j2k3l的博客 1173

2026华为OD机考新系统真题 + 双机位C卷 + 往年真题 - 题库目录分值说明 + 考点说明+在线OJ

2026年4月1日起,华为OD机试正式切换至新系统模式!采用力扣模式,无需自己写输入! 难度大幅度降低。正在备考华为OD机试的同学,优先刷新系统机试真题,可大幅提升通过率。 新系统考题考点与旧版一致,无需重新适应。本专栏所有算法题均配有详细思路解析,并提供C语言、JS、C++、Python、Go、Java多语言源码实现。订阅后私信即可开通专属OJ刷题权限,高效备考一次上岸!

算法大师! 45万+

数组模拟环形队列 Java实现

【代码】数组模拟环形队列 Java实现。

m0_67417362的博客 189

【点云鸟瞰图BEV】点云鸟瞰图BEV原理与可视化

本节将介绍激光雷达等点云的鸟瞰图生成原理、代码及效果图。 1 BEV视图原理 点云BEV(Bird's Eye View)视图是指点云在垂直于高度方向的平面上的投影。通常,在获得bev视图前,会将空间分割成体素,利用体素对点云进行下采样,然后将每个体素作为一个点进行投影。体素是指将三维空间按照固定尺寸长方体进行划分时的长方体(Δl*Δw*Δh)。 体素投影时可以得到BEV视图的像素点坐标。每个像素点的特征取值则可以通过多种方式得到。 ...

叶子的博客 2万+

java数据结构和算法——数组模拟队列(queue)

一、队列介绍 队列是一个有序列表,可以用数组或是链表来实现。 遵循先入先出的原则。即:先存入队列的数据,要先取出。后存入的要后取出 二、数组模拟队列介绍 队列本身是有序列表,若使用数组的结构来存储队列的数据,则队列数组的声明如上图图, 其中 maxSize 是该队列的最大容量。 因为队列的输出、输入是分别从前后端来处理,因此需要两个变量 front及 rear分别记录队列前后端的下标,front 会随着数据输出而改变,而 rear则是随着数据输入而改变。 front 指向队列头部,分析出front是

小志的博客 1125

自己的搭建的slam机器人建图导航测试

1、前言 这里是对自己搭建的slam机器人建图导航的功能测试,原本并不想写这一篇的,因为每个小伙伴的需求都不一样,但是发现还是有同学有需求,于是就有了这一篇。本篇属于说明分享类文章,不涉及细节解释。按照步骤操作即可。 本次测试需要建图算法my_slam_gmapping、导航框架navigation、以及explore_lite功能包、mbot_teleop键盘控制功能包等。 环境:ubuntu mate 16.04 + ROS Kinetic 功能包下载:在公众号:小白学移动机器人,发送:建图导航测试,即

「小白学移动机器人」一个专注分享移动机器人相关知识的公众号! 8700

脑电信号处理实战 01 | 从 0 跑通第一个 EEG 分析:加载、滤波、频谱与“睁眼闭眼“

本文以 UCI 公开数据集"EEG Eye State"为例,从零走通脑电处理的完整流水线——数据加载、1–40 Hz 带通滤波、Welch 功率谱、频带功率、通道相关性与箱线图质控、睁闭眼对比和时频分析,并用 8 张科研风格图层层揭示这份数据中的伪迹与通道重复问题,说明"流程跑得通不等于结果可信,质量控制永远先行"。

qq_53529450的博客 112

二、数组模拟环形队列思路及代码实现

队列 总:我首先会介绍数组模拟队列思路及代码实现,并分析其弊端;之后将代码进行优化,将其转换为数组模拟环形队列。 1.队列介绍 (1)队列是一个有序列表,可以使用数组或者链表来实现 (2)遵循先入先出的原则:即先存入队列的数据会先被取出,后被存入的数据后被取出。 2.数组模拟队列思路 (1)队列本身是有序列表,若使用数组的结构来存储队列的数据,则队列数组的申明如下图,其中maxSize是该队列的最大容量 (2)因为队列的输入输出是从前后端来处理,因此需要两个变量front和rear分别记录队列前后端的下标,

zhaozhiwei314的博客 279

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

数组变幻与累加问题

Python解题。

ljy的博客 981

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

三、数组队列和循环队列的思路及代码实现

文章目录1、队列的介绍2、数组队列的模拟思路3、数组队列的代码实现4、循环队列的模拟思路5、循环队列的代码实现 1、队列的介绍 队列是一个有序列表,可以用数组或是链表来实现。 遵循先入先出的原则。即:先存入队列的数据,要先取出。后存入的要后取出 示意图:(使用数组模拟队列示意图) 2、数组队列的模拟思路 1、队列本身是有序列表,若使用数组的结构来存储队列的数据,则队列数组的声明如下图, 其中maxSize 是该队列的最大容量。 2、因为队列的输出、输入是分别从前后端来处理,因此需要两个变量 front

wy_188的博客 325

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

队列详解及java代码实现

1、队列的应用场景: 银行叫号、餐厅排队、 2、队列介绍 队列是一个有序列表,可以用数组或链表来实现(用数组来实现:顺序存储;用链表来实现,就是链式存储) 遵循先入先出的原则,即:先存入队列的数据,要先取出,后存入的要后取出 ...

weixin_43206928的博客 543

学习笔记-队列(数组实现)

使用场景 模拟银行叫号系统 队列介绍 队列是一个有序列表,可以用数组或是链表来实现 遵循先入先出的原则,即:先存入队列的数据,要先取出,后存入的要后取出 队列本身是有序列表,使用数组的结构来存储队列的数据 因为队列的输入,输出是分别从前后端来处理,因此需要两个变量front及rear分别记录队列签 后端的下标,front会随着数据输出而改变,而rear则是随着数据输入而改变,(入队列rear增加 ,出队列front增加) 示意图 数组模拟队列思路分析 将尾指针后移.rear+1, front == r

weixin_44939996的博客 191

数据结构自学笔记(2)-- 使用数组模拟队列

数据结构第二节-- 使用数组模拟队列使用数组模拟队列思路分析思路图代码实现使用数组模拟环形队列思路分析思路图代码实现 首先定义三个变量 maxSize代表数组最大容量,front代表头指针,rear代表尾指针 使用数组模拟队列 思路分析 首先应该有一个队列最大长度 其次 应该创建头尾两个指针 其中初始化的时候头尾指针都指向-1 头指针不包含第一个数据 尾指针包含最后一个数据 入队列时候尾指针自增 出队列时候头指针自增 头指针等于尾指针的时候,代表没有数据 尾指针等于最大长度减一的时候,代表满数据 注

超哥的博客 373

稀疏数组和队列

数据结构第一天数据结构一、稀疏数组(sparsearray) ---代码参考(sparseArray)二、队列 (Queue)1.概念2.用数组进行队列的创建2.测试自建的队列总结 文章目录第一天数据结构一、稀疏数组(sparsearray) ---代码参考(sparseArray)二、队列 (Queue)1.概念2.用数组进行队列的创建2.测试自建的队列总结 第一天 数据结构 数据结构包括:线性结构和非线性结构 线性结构: 1、 线性结构作为最常用的数据结构,其特点是数据元素之间存在一对

AX_Chu的博客 377

Java 数据结构与算法3——队列

目录1队列介绍2思路分析3代码实现4问题分析并优化问题:使用数组模拟环形队列思路分析: 1队列介绍 队列是一个有序列表 遵循先入先出的原则。即:先存入队列的数据,要先取出。后存入的要后取出 示意图:(使用数组模拟队列示意图) 队列Queue中的输出、输入是分别从前后端来处理,因此需要两个变量front和rear分别标记队列的前后端下标。加数据rear增加front不变,取数据front增加rear不变。 2思路分析 将尾指针往后移: rear+1,当front == rear【空】 若尾指针rear

weixin_45968656的博客 318

数据结构之队列

数据结构之队列一级目录二级目录三级目录 一级目录 二级目录 三级目录

WARCRAFT3X的博客 141

数据结构和算法(java版)-队列

队列介绍 队列是一个有序列表,可以用数组或是链表来实现。 遵循先入先出的原则。即:先存入队列的数据,要先取出。后存入的要后取出 示意图:(使用数组模拟队列示意图) 数组模拟队列 队列本身是有序列表,若使用数组的结构来存储队列的数据,则队列数组的声明如下图, 其中 maxSize 是该队列的最大容量。 因为队列的输出、输入是分别从前后端来处理,因此需要两个变量 front及 rear分别记录...

java梦工厂 249
上一篇: 数据结构—树
下一篇: 二叉树的存储结构
lu_long
博客等级 码龄8年 11粉丝 43原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值