首页 > 编程语言 >Java数据结构---Queue

Java数据结构---Queue

时间:2024-09-06 12:52:49浏览次数:6  
标签:Queue return int elem --- Java null public first

队列Queue

队列:只允许在一端进行插入数据操作,在另一端进行删除数据操作的特殊线性表。


入队列(Enqueue):进行插入操作的一端称为队尾

出队列(Dequeue):进行删除操作的一端称为队头

队列具有先进先出的特性



大家可以简单理解为日常生活中“排队”这一现象。


队列的模拟实现

简单想一想,因为LinkedList实现了Queue接口,所以Queue的底层是由链表实现的。


受到LinkedList的影响,我们下意识认为Queue的底层是双向链表,那单链表能不能来实现队列呢?


那么以LinkedList来实现队列怎么样呢?

建立内部类


//内部类

   public static class ListNode {

       public ListNode prev;

       public ListNode next;

       int value;


       ListNode(int value){

           this.value=value;

       }

   }


   public ListNode first=null;

   public ListNode last=null;

   int Usedsize=0;


入队列—向双向链表位置插入新节点


public void offer(int val){

       ListNode node=new ListNode(val);

       if(first==null){

           first=last=node;

       }else{

           last.next=node;

           node.prev=last;

       }

       last=node;

       Usedsize++;

   }


出队列—将双向链表第一个节点删除掉


public int poll(){

       int val=0;

       if(first==null){

           return 0;

       }

       if(first==last){

           last=null;

           first=null;

       }else{

           val=first.value;

           first=first.next;

           first.prev.next=null;

           first.prev=null;

       }

       Usedsize--;

       return val;

   }


获取队头元素—获取链表中第一个节点的值域


public int peek(){

       if(first==null){

           return 0;

       }

       return first.value;

   }

class MyCircularQueue {

    public int front;
    public int rear;
    public int[] elem;

    public MyCircularQueue(int k) {
        elem=new int[k+1];
    }
    
    public boolean enQueue(int value) {
        if(isFull()){
            return false;
        }
        elem[rear]=value;
        rear=(rear+1) % elem.length;
        return true;
    }
    
    public boolean deQueue() {
        if(isEmpty()){
            return false;
        }
        front=(front+1)%elem.length;
        return true;
    }
    
    public int Front() {
        if(isEmpty()){
            return-1;
        }
        return elem[front];
    }
    
    public int Rear() {
        if(isEmpty()){
            return -1;
        }
        int index=(rear==0)?elem.length-1:rear-1;
        return elem[index];
    }
    
    public boolean isEmpty() {
        return rear==front;
    }
    
    public boolean isFull() {
        return (rear+1)%elem.length==front;
    }
}

标签:Queue,return,int,elem,---,Java,null,public,first
From: https://blog.51cto.com/u_16270801/11937320

相关文章

  • Java中如何实现minio文件上传
    一、导入minio依赖这里还要导入lombok是因为在MinIOConfig类中使用了@Data注解,正常来说导入minio依赖就够了<dependency>   <groupId>io.minio</groupId>   <artifactId>minio</artifactId>   <version>7.1.0</version> </dependency><dependency......
  • 【运维自动化-配置平台】平台管理功能如何使用
    BlueKing智云配置平台,以下简称配置平台配置平台里的平台管理功能是管理员的一些操作,比如一些全局纬度的设置1、全局配置-业务通用业务快照名称:通常不需要修改,保持平台搭建好默认业务(BlueKing)即可拓扑最大可见层级:可根据实际业务场景自定义调整,需要注意的是,这个是全局的调整,针......
  • 计算机毕业设计推荐-基于python的老年人健康检测管理系统【python-爬虫-大数据定制】
    精彩专栏推荐订阅:在下方专栏......
  • Meta-Prompt: 自动构建Prompt
    我强烈建议你使用claude-3.5-sonnet,在生成Prompt这个工作上比GPT-4o有着更好的表现将用户的输入需求转化为一个清晰结构化的Prompt,确保Prompt简单而且富有层次,能够让LLM理解并且高效地执行#Thought‍‍```mermaidmindmaproot((如何设计高效Prompt))需求分析......
  • 【IEEE出版 | 院士杰青领衔】第五届大数据、人工智能与软件工程国际研讨会(ICBASE 2024
    第五届大数据、人工智能与软件工程国际研讨会(ICBASE2024)将于2024年09月20-22日在中国温州隆重举行。会议主要围绕大数据、人工智能与软件工程等研究领域展开讨论。会议旨在为从事大数据、人工智能与软件工程研究的专家学者、工程技术人员、技术研发人员提供一个共享科研......
  • 数据结构-栈、队列-相关练习
    数据结构-栈、队列-相关练习1.用队列实现栈2.用栈实现队列3.设计循环队列1.用队列实现栈用队列实现栈题目概述:请你仅使用两个队列实现一个后入先出(LIFO)的栈,并支持普通栈的全部四种操作(push、top、pop和empty)。这里只讲大致思路,如下图:互相倒就行了,下面讲个具体......
  • 从内存层面分析Java 参数传递机制
    在Java中,理解参数传递机制对于编写高效和可维护的代码至关重要。本文将探讨基本数据类型和引用数据类型的参数传递方式,并介绍System.identityHashCode方法及其作用。我们将结合栈帧的概念,通过示例代码来详细解释这些机制。System.identityHashCode的作用System.ident......
  • YOLOv8改进 | 注意力篇 | YOLOv8引入YOLO-Face提出的SEAM注意力机制优化物体遮挡检测
    1. SEAM介绍1.1 摘要:近年来,基于深度学习的人脸检测算法取得了长足的进步。这些算法通常可以分为两类,即像FasterR-CNN这样的两级检测器和像YOLO这样的一级检测器。由于精度和速度之间具有更好的平衡,一级探测器已广泛应用于许多应用中。在本文中,我们提出了一种基于......
  • 【运维自动化-配置平台】模型及模型关联最小化实践
    蓝鲸智云配置平台,以下简称配置平台我们知道主机是配置平台最常见的管控资源对象,在业务拓扑里可以通过划分模块来清晰的可视化管理;那其他资源如何通过配置平台来纳管呢,比如网络设备交换机。场景需求:如何把交换机和主机的关联关系在配置平台进行可视化的纳管一.不友好的方式通......
  • SSH框架整合实现Java三层架构实例(一)
    HTML前台发送请求代码:1<tr>2<td>选择收派时间</td>3<td>4<inputtype="text"name="takeTimeId"class="easyui-combobox"required="true"5data-options="url:'../........