首页 > 其他分享 >队列环形数组实现两种实现

队列环形数组实现两种实现

时间:2023-09-25 19:56:16浏览次数:32  
标签:head return 队列 环形 实现 tail push array public

 

 

1

import java.util.Iterator;
//环形队列,数组容量应该比实际需要大一
public class Main {
public static void main(String[] args) {
ArrayQueue<Integer> a=new ArrayQueue<>(10);
a.push(1);
a.push(2);
a.push(3);
a.push(4);
a.push(5);
a.push(6);
a.push(7);
a.pop();
System.out.println(a.peekFirst());
System.out.println(a.peekLast());
Iterator<Integer> I=a.iterator();
while(I.hasNext())
{
System.out.println(I.next());
}
}
public static class ArrayQueue<E>
{
int capacity;
int head=0;
int tail=0;
E []array;

public ArrayQueue(int capacity) {
array=(E[])new Object[capacity+1];
}
public boolean push(E value)
{
if(full())
{
return false;
}
array[tail]=value;
tail=(tail+1)%array.length;//易错点
return true;
}
public E peekFirst()
{
if(isempty())
{
return null;
}
return array[head];
}
public E peekLast()
{
if(isempty())
{
return null;
}
if(tail-1<0)
{
tail=tail-1+5;
}
return array[tail-1];
}
public E pop()
{
if(isempty())
{
return null;
}
E p=array[head];
head=(head+1)%array.length;
return p;
}
public Iterator<E> iterator()
{
return new Iterator<E>() {
int p=head;
@Override
public boolean hasNext() {
return p!=tail;
}

@Override
public E next() {
E p1=array[p];
p=(p+1)%array.length;
return p1;
}
};
}
public boolean isempty()
{
return head==tail;
}
public boolean full()
{
return (tail+1)% array.length==head;
}

}
}     2 import java.util.Iterator;

//单向环形队列 数组容量与需要容量一致 如果满了head和tail也会重合
public class Main {
public static void main(String[] args) {
ArrayQueue<Integer> a=new ArrayQueue<>(10);
a.push(1);
a.push(2);
a.push(3);
a.push(4);
a.push(5);
a.push(6);
a.push(7);
a.pop();
System.out.println(a.peekFirst());
System.out.println(a.peekLast());
Iterator<Integer> I=a.iterator();
while(I.hasNext())
{
System.out.println(I.next());
}
}
public static class ArrayQueue<E>
{
int head=0;
int tail=0;
int size=0;
E []array;

public ArrayQueue(int capacity) {
array=(E[])new Object[capacity];
}
public boolean push(E value)
{
if(full())
{
return false;
}
array[tail]=value;
tail=(tail+1)%array.length;
size++;
return true;
}
public E peekFirst()
{
if(isempty())
{
return null;
}
return array[head];
}
public E peekLast()
{
if(isempty())
{
return null;
}
if(tail-1<0)
{
tail=tail-1+5;
}
return array[tail-1];
}
public E pop()
{
if(isempty())
{
return null;
}
E p=array[head];
head=(head+1)%array.length;
size--;
return p;
}
public Iterator<E> iterator()
{
return new Iterator<E>() {
int p=head;
int count=0;
@Override
public boolean hasNext() {
return count<size;
}

@Override
public E next() {
E p1=array[p];
p=(p+1)%array.length;
count++;
return p1;
}
};
}
public boolean isempty()
{
return size==0;
}
public boolean full()
{
return size== array.length;
}

}
}

标签:head,return,队列,环形,实现,tail,push,array,public
From: https://www.cnblogs.com/zhaoqianwan/p/17728716.html

相关文章

  • 使用Vue3+elementPlus的Tree组件实现一个拖拽文件夹管理
    目录1、前言2、分析3、实现4、踩坑4.1、拖拽辅助线的坑4.2、数据的坑4.3、限制拖拽4.4、样式调整1、前言最近在做一个文件夹管理的功能,要实现一个树状的文件夹面板。里面包含两种元素,文件夹以及文件。交互要求如下:创建、删除,重命名文件夹和文件可以拖拽,拖拽文件到文件夹中,或......
  • 如何实现一个数组按照另外一个数组的顺序进行排序?
    数组arr1按照arr2的顺序展示,如何实现:一、简单类型数组letarr1=[1,2,3,4,5] letarr2=[5,3,2,4,1]arr1.sort((prev,next)=>{ returnarr2.indexOf(prev)-arr2.indexOf(next)})console.log(arr1)//[5,3,2,4,1]二、复杂类型数组letarr1=[{......
  • 智慧工地系统源码,实现对施工全过程的实时监控、数据分析、智能管理和优化调控
    智慧工地是指通过信息化技术、物联网、人工智能技术等手段,对建筑工地进行数字化、智能化、网络化升级,实现对施工全过程的实时监控、数据分析、智能管理和优化调控。智慧工地的建设可以提高工地的安全性、效率性和质量,降低施工成本,是建筑行业数字化转型升级的重要抓手。智慧工地物......
  • 智慧工地系统源码,实现对施工全过程的实时监控、数据分析、智能管理和优化调控
    智慧工地是指通过信息化技术、物联网、人工智能技术等手段,对建筑工地进行数字化、智能化、网络化升级,实现对施工全过程的实时监控、数据分析、智能管理和优化调控。智慧工地的建设可以提高工地的安全性、效率性和质量,降低施工成本,是建筑行业数字化转型升级的重要抓手。智慧工地物联......
  • Android平台轻量级RTSP服务模块如何实现一个服务发布多路RTSP流?
    我们在做Android平台轻量级RTSP服务和内网RTSP网关的时候,遇到过这样的问题,如何同时发布多路RTSP流出去?回答这个问题,实际上不难,大牛直播SDK在设计这个模块的时候,考虑到了一个Service带多路流的情况,以下是大概的技术实现:启动RTSP服务:启动RTSP服务的时候,你可以注意到OpenRtspServer()......
  • 基于weka的数据库挖掘➖分类方法的实现
    基于weka的数据库挖掘➖分类方法的实现关于作者作者介绍......
  • 使用JavaScript实现无限滚动的方法
    前言在网页设计中,无限滚动是一种常见的交互方式,用户可持续地加载更多内容而无需刷新页面,提高用户体验。本文将介绍如何运用JavaScript实现无限滚动的效果,使网页能够自动加载更多数据,减轻用户加载新页的负担,为用户提供更好的访问体验。原理理解无限滚动的原理无限滚动的原理是当......
  • 使用json+echarts实现数据库数据的可视化
    因为我上次是使用的另外一种方法实现的可视化,对json了解的不够,所以来补充一下这一块的知识点1、新建一个SpringBoot项目2、添加依赖<dependency><groupId>com.mysql</groupId><artifactId>mysql-connector-j</artifactId></dependency><d......
  • vue+el 实现 阶梯效果
    [简介]:关键代码;<el-rowclass='midPart'style=''>{{menu.name}}</el-row>.midPart{float:left;width:4%;padding:7px7px;background:#444;}[内容]:<template><divid="MidMenu"><divref=�......
  • 递归实现树形结构数据的查询处理
    最近在做一个树形结构数据的处理,类似于俄罗斯套娃那种无限层数的那种树形结构,查询出所有数据并按层级进行展示于是做了一个小demo,数据库大概如下:处理完的数据如下:[{"id":1,"name":"零食","desc":"最初级","pid":0,"nodeSign......