队列(JAVA)

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


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


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

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


在JAVA中队列和栈不同Stack是一个类,Queue是个接口,底层是通过链表实现的

image.png

队列有以下的方法

方法 功能
boolean offer(E e) 入队列
E poll() 出队列
peek() 获取队头元素
int size() 获取队列中有效元素个数
boolean isEmpty() 检测队列是否为空


因为Queue是个接口,在实例化时必须实例化LinkedList的对象,因为LinkedList实现了Queue接口。


Queue<Integer>queue1=newLinkedList<>();
Queue<Integer>queue2=newLinkedList<>();

image.gif

循环队列

循环队列就类似将一个数组卷起来变成一个圆环。

image.png

可是这也出现了一些问题比如如何判断队列是空还是满?

有三种解决方法:

    1. 通过添加 size 属性记录
    2. 保留一个位置
    3. 使用标记

    还有一个问题就是如果发生下面这种情况,我们此时还想再插入一个元素。如何让end指向下标为0的区域呢?

    image.png

    解决方法就是:

    (1 + 尾指针所指下标)% 队列长度

    代码实现:

    classMyCircularQueue {
    int[] queue;
    intfront=0;
    intend=0;
    publicMyCircularQueue(intk) {
    queue=newint[k+1];
        }
    publicbooleanenQueue(intvalue) {
    if (isFull()) {
    returnfalse;
            }
    queue[end] =value;
    end= (end+1)%queue.length;
    returntrue;
        }
    publicbooleandeQueue() {
    if (isEmpty()) {
    returnfalse;
            }
    front= (front+1)%queue.length;
    returntrue;
        }
    publicintFront() {
    if (isEmpty()) {
    return-1;
            }
    returnqueue[front];
        }
    publicintRear() {
    if (isEmpty()) {
    return-1;
            }
    returnqueue[(end-1+queue.length)%queue.length];
        }
    publicbooleanisEmpty() {
    returnfront==end;
        }
    publicbooleanisFull() {
    return (end+1) %queue.length==front;
        }
    }

    image.gif


    目录
    相关文章
    |
    6天前
    |
    前端开发 Java
    java中的Queue队列的用法
    java中的Queue队列的用法
    21 1
    |
    6天前
    |
    存储 安全 算法
    解读 Java 并发队列 BlockingQueue
    解读 Java 并发队列 BlockingQueue
    24 0
    |
    5月前
    |
    Java
    225. 用队列实现栈 --力扣 --JAVA
    请你仅使用两个队列实现一个后入先出(LIFO)的栈,并支持普通栈的全部四种操作(push、top、pop 和 empty)。 实现 MyStack 类: void push(int x) 将元素 x 压入栈顶。 int pop() 移除并返回栈顶元素。 int top() 返回栈顶元素。 boolean empty() 如果栈是空的,返回 true ;否则,返回 false 。
    46 1
    |
    7月前
    |
    存储 消息中间件 缓存
    Java数据结构第三讲-栈/队列
    Java数据结构第三讲-栈/队列
    |
    6天前
    |
    存储 安全 Java
    Java多线程实战-从零手搓一个简易线程池(一)定义任务等待队列
    Java多线程实战-从零手搓一个简易线程池(一)定义任务等待队列
    |
    6天前
    |
    存储 Java C++
    Java集合篇之深度解析Queue,单端队列、双端队列、优先级队列、阻塞队列
    Java集合篇之深度解析Queue,单端队列、双端队列、优先级队列、阻塞队列
    26 0
    |
    6天前
    |
    消息中间件 Java API
    RabbitMQ入门指南(五):Java声明队列、交换机以及绑定
    RabbitMQ是一个高效、可靠的开源消息队列系统,广泛用于软件开发、数据传输、微服务等领域。本文主要介绍了Java声明队列、交换机以及绑定队列和交换机等内容。
    40 0
    |
    6天前
    |
    Java
    【Java】栈和队列的模拟实现(包括循环队列)
    【Java】栈和队列的模拟实现(包括循环队列)
    6 0
    |
    7月前
    |
    存储 Java 调度
    Java 最常见的面试题:队列和栈是什么?有什么区别?
    Java 最常见的面试题:队列和栈是什么?有什么区别?
    |
    6天前
    |
    存储 安全 Java
    JAVA常用队列类
    JAVA常用队列类