【数据结构与算法 | 基础篇】环形数组模拟队列

1. 前言

上文我们用环形单向链表实现了队列.接下来我们用环形数组来模拟队列.并实现了isFull(),isEmpty()等方法.

2. 环形数组模拟队列

(1). Queue接口 : 

public interface Queue<E> {//向队伍插入值, 插入成功返回true, 否则返回falseboolean offer(E value);//对队头获取值, 但不移除E poll();//从队头获取值, 并移除队头E peek();//判断队伍是否为空boolean isEmpty();//判断队列是否已满boolean isFull();
}

(2). 环形数组模拟队列

public class ArrayQueue<E> implements Queue<E>, Iterable<E>{//数组的容量private int capacity;//环形数组private E[] queue;//队头private int head = 0;//队尾private int tail = 0;public ArrayQueue() {capacity = 10;}public ArrayQueue(int capacity) {this.capacity = capacity;//数组capacity个位置存储数据, 剩下一个位置用来区分队伍是满了还是空了的情况queue = (E[]) new Object[capacity + 1];}@Overridepublic boolean offer(E value) {//如果队伍已经满了, 那么添加元素失败if(isFull()) {return false;}queue[tail] = value;tail = (tail + 1) % queue.length;return true;
}@Overridepublic E poll() {//如果队列为空, 那么返回nullif(isEmpty()) {return null;}return queue[head];}@Overridepublic E peek() {//如果队列为空, 那么返回nullE value = queue[head];head = (head + 1) % queue.length;return value;}@Overridepublic boolean isEmpty() {return head == tail;}@Overridepublic boolean isFull() {//数组的长度queue.length并不等于数组的容量capacityreturn (tail+1) % queue.length == head;}@Overridepublic Iterator<E> iterator() {return new Iterator<E>() {int p = head;@Overridepublic boolean hasNext() {return p != tail;}@Overridepublic E next() {E value = queue[p];p++;return value;}};}
}

3. 单元测试

public class ArrayQueueTest {@Testpublic void test() {ArrayQueue<Integer> queue = new ArrayQueue<>(5);queue.offer(1);queue.offer(2);queue.offer(3);queue.offer(4);queue.offer(5);
//        for (Integer element : queue) {
//            System.out.print(element);
//        }//12345System.out.println(queue.poll());//1System.out.println(queue.peek());//1System.out.println(queue.poll());//2}
}

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

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

相关文章

【Linux】TCP协议【上】{协议段属性:源端口号/目的端口号/序号/确认序号/窗口大小/紧急指针/标记位}

文章目录 1.引入2.协议段格式4位首部长度16位窗口大小32位序号思考三个问题【demo】标记位URG: 紧急指针是否有效提升某报文被处理优先级【0表示不设置1表示设置】ACK: 确认号是否有效PSH: 提示接收端应用程序立刻从TCP缓冲区把数据读走RST: 对方要求重新建立连接; 我们把携带R…

windows 设置系统字体 (win11 win10)

由于微软的字体是有版权的&#xff0c;所以我打算替换掉 1.下载替换工具 github的项目&#xff0c;看起来很多人对微软默认字体带版权深恶痛绝。 项目地址&#xff1a;nomeiryoUi地址 这里选取最新的版本即可 2.打开软件 这里显示标题栏不能改&#xff0c;确认&#xff0c;其…

盖雅技能发展云,助力制造企业人效合一

制造行业尽管经历多次变革&#xff0c;但企业对人的管理始终是一项高度依赖经验和耗费人力的工作。随着供应链管理和生产设备的自动化、数字化升级&#xff0c;如何将第一生产要素——人&#xff0c;通过数字化的工具融入制造过程的闭环&#xff0c;对企业实现自动化工厂和智能…

力扣 滑动窗口题目总结

Leetcode3.无重复字符的最长子串 思路&#xff1a; 这道题主要用到思路是&#xff1a;滑动窗口 什么是滑动窗口&#xff1f; 其实就是一个队列,比如例题中的 abcabcbb&#xff0c;进入这个队列&#xff08;窗口&#xff09;为 abc 满足题目要求&#xff0c;当再进入 a&#x…

牛客NC334 字典序第K小【困难 10叉树 Java/Go/PHP/C++】,力扣 440. 字典序的第K小数字

题目 题目链接&#xff1a; https://www.nowcoder.com/practice/670c2bda374241d7ae06ade60de33e8b https://leetcode.cn/problems/k-th-smallest-in-lexicographical-order/description/ 本答案核心 10叉树, 数学规律Java代码 import java.util.*;public class Solution {…

大模型的灵魂解读:Anthropic AI的Claude3 Sonnet可解释性研究

大模型技术论文不断&#xff0c;每个月总会新增上千篇。本专栏精选论文重点解读&#xff0c;主题还是围绕着行业实践和工程量产。若在某个环节出现卡点&#xff0c;可以回到大模型必备腔调重新阅读。而最新科技&#xff08;Mamba,xLSTM,KAN&#xff09;则提供了大模型领域最新技…

Vue集成Iframe

一、应用场景&#xff0c;为什么要集成Iframe&#xff1f; 1、庞大项目拆分后&#xff0c;便于管理和部署&#xff0c;用集成Iframe的方法合并 2、避免功能重复开发&#xff0c;共用模块可单独开发为一个项目&#xff0c;既可独立部署&#xff0c;也可集成到中台系统 二、集成…

[算法][前缀和] [leetcode]724. 寻找数组的中心下标

题目地址 https://leetcode.cn/problems/find-pivot-index/description/ 题目描述 代码 class Solution {public int pivotIndex(int[] nums) {int total Arrays.stream(nums).sum();//前缀和int prefixSum 0;int len nums.length;for(int i 0;i<len;i){if (i-1>0){p…

小猪APP分发:一站式托管服务,轻松玩转应用市场

在当今移动应用爆炸式增长的时代&#xff0c;开发者们面临的挑战不再仅限于创意的火花和代码的实现&#xff0c;更在于如何让精心打造的应用快速触达广大用户。这正是小猪APP分发www.appzhu.net应运而生的背景——作为一个全面、高效的APP托管服务分发平台&#xff0c;它为开发…

基于PHP的物业管理的设计与实现

第1章 绪论... 1 1.1 研究背景与意义... 1 1.2 国内外发展现状... 2 第2章 关键技术介绍... 3 2.1 PHP语言... 3 2.2 MySQL数据库... 3 2.3 Zend框架... 4 2.4 B/S架构... 4 第3章 系统需求分析... 5 3.1 可行性分析... 5 3.1.1 技术可行性分析... 5 3.1.2 经济可行…

解决Java中的IllegalArgumentException异常的正确方法

解决Java中的IllegalArgumentException异常的正确方法 引言 在Java编程中&#xff0c;IllegalArgumentException是一个常见的运行时异常&#xff0c;它通常在方法接收到不合法或不适当的参数时抛出。这篇文章将详细介绍IllegalArgumentException异常的原因、如何诊断以及解决…

金职优学:分析央国企面试如何通关?

在当今竞争激烈的就业市场中&#xff0c;中央和国有企业&#xff08;以下简称“央国企”&#xff09;的面试机会对求职者来说是非常有吸引力的。这些企业通常拥有稳定的发展前景、良好的薪酬福利和广阔的职业发展空间。但是&#xff0c;要想成功通过央国企的面试&#xff0c;求…

探索Python编程世界:从基础到实战

新书上架~&#x1f447;全国包邮奥~ python实用小工具开发教程http://pythontoolsteach.com/3 欢迎关注我&#x1f446;&#xff0c;收藏下次不迷路┗|&#xff40;O′|┛ 嗷~~ 目录 一、Python语言简介与动态特性 代码示例&#xff1a;动态类型与变量命名 二、Python应用领…

vue 表格表头展示不下,显示。。。;鼠标悬浮展示全部

vue 表格表头展示不下&#xff0c;显示。。。&#xff1b;鼠标悬浮展示全部 <templateslot-scope"scope"slot"header"><span:title"临时证券类型"style"white-space:nowrap">{{ 临时证券类型 }}</span></templa…

Terminal Web终端基础(Web IDE 技术探索 二)

Terminal是web终端技术&#xff0c;类似cmd命令窗口&#xff0c;Webcontainer 中推荐使用的是Xterm.js&#xff0c;这里就不细说Xterm.js 的使用了&#xff0c;我们使用第三方库来实现&#xff08;原生确实有点难用&#xff09;。 vue-web-terminal 一个由 Vue 构建的支持多内容…

【设计模式】JAVA Design Patterns——Bytecode(字节码模式)

&#x1f50d;目的 允许编码行为作为虚拟机的指令 &#x1f50d;解释 真实世界例子 一个团队正在开发一款新的巫师对战游戏。巫师的行为需要经过精心的调整和上百次的游玩测试。每次当游戏设计师想改变巫师行为时都让程序员去修改代码这是不妥的&#xff0c;所以巫师行为以数据…

环形链表Ⅱ-力扣

第一种解法时哈希表&#xff0c;set在使用insert插入时&#xff0c;会返回一个pair&#xff0c;如果pair的值为0&#xff0c;则插入失败&#xff0c;那么返回这个插入失败的节点&#xff0c;就是入环的第一个节点&#xff0c;代码如下&#xff1a; /*** Definition for singly…

导航【面试准备】

导航【面试准备】 前言版权导航【面试准备】面经准备 最后 前言 2024-5-20 12:47:11 以下内容源自《【面试准备】》 仅供学习交流使用 版权 禁止其他平台发布时删除以下此话 本文首次发布于CSDN平台 作者是CSDN日星月云 博客主页是https://jsss-1.blog.csdn.net 禁止其他平…

AcW木棒-XMUOJ恢复破碎的符咒木牌-DFS与剪枝

题目 思路 话不多说&#xff0c;直接上代码 代码 /* AcW木棒-XMUOJ恢复破碎的符咒木牌 搜索顺序&#xff1a;从小到大枚举最终的长度 len从前往后依次拼每根长度为len的木棍 优化&#xff1a; 1.优化搜索顺序&#xff1a;优先选择深度短的来搜索&#xff0c;故从大到小去枚…

【系统分析师】WEB开发-案例

文章目录 1、WEB开发涉及内容1.1 负载均衡技术1.2 数据库读写分离1.3 缓存 缓解读库压力1.4 CDN1.5 WEB应用服务器1.6 整体结构1.6 相关技术1.6.1 redis相关(集群、持久化等)1.6.2 XML与JSON1.6.3 REST1.6.4 响应式web设计1.6.5 关于中台1.6.6 Web系统分层 1、WEB开发涉及内容 …