基于java的队列实现

集合系列(十一) -ArrayDeque详解 关于 LinkedList 实现类,在之前的文章中已经有所介绍,今天咱们来介绍一下 ArrayDeque 这个类,如果有理解不当之处,欢迎指正。 阅读详情

基于单链表的队列实现

package org.util.ds;

import java.util.Random;

/**
 * 队列
 * @author Weibing Long
 * @since 2018.04.16
 * @param <Item> 泛型
 */
public class Queue<Item> {
    private Node root;
    private int n;

    public static void main(String[] args) {
        Queue<Integer> queue = new Queue<Integer>();
        Random random = new Random();
        System.out.println("进队列");
        for (int i = 0; i < 100; i++) {
            int x = random.nextInt();
            queue.enqueue(x);
            System.out.println(x);
        }
        System.out.println("出队列");
        while (queue.size() > 0)
            System.out.println(queue.dequeue());
    }

    private class Node {
        private Item item;
        private Node next;
    }

    public void enqueue(Item item) {
        if (item == null)
            throw new NullPointerException("元素不能为空!");
        if (root == null) {
            root = new Node();
            root.item = item;
            root.next = root;
        } else {
            Node temp = root.next;
            root.next = new Node();
            root.next.item = item;
            root = root.next;
            root.next = temp;
        }
        n++;
    }

    public Item dequeue() {
        if (n == 0)
            throw new NullPointerException("队列中元素为空!");
        Item item = root.next.item;
        root = root.next;
        n--;
        return item;
    }

    public int size() {
        return n;
    }
}

基于数组的实现

上面代码是基于循环链表实现的,下面代码基于数组实现

package org.util.ds;
/**
 * 队列,基于动态数组
* @author 龙卫兵
*/
public class Queue<Item> {
    private Object[] myArray;
    private int capacity;  // 容量
    private int n;  // 元素个数

    public Queue() {
        capacity = 2;
        myArray = new Object[capacity];
    }

    public Queue(int capacity) {
        this.capacity = capacity;
        myArray = new Object[capacity];
    }

    public void push(Item item) {
        if (n > capacity/2) {
            capacity *= 2;
            Object[] temp = new Object[capacity];
            for (int i = 0; i < capacity/2; i++)
                temp[i] = myArray[i];
            myArray = temp;
        }       
        myArray[n++] = item;
    }

    public void pop() {
        if (isEmpty())
            throw new NullPointerException("数组为空");
        else {
            for (int i = 0; i < n-1; i++) {
                myArray[i] = myArray[i + 1];
            }
            myArray[--n] = null;
        }
    }

    public int size() {
        return n;
    }

    public int getCapacity() {
        return capacity;
    }

    public boolean isEmpty() {
        return n == 0;
    }

    public void printContent() {
        for (int i = 0; i < n; i++) {
            System.out.println(myArray[i]);
        }
    }

    @SuppressWarnings("unchecked")
    public Item[] content() {
        String itemName = myArray[0].getClass().getSimpleName();
        if (itemName.equals("Integer")) {
            Integer[] temp = new Integer[n];
            for (int i = 0; i < n; i++) {
                temp[i] = new Integer(myArray[i].toString());
                // System.out.println(temp[i]);
            }
            return (Item[])temp;
        } else if (itemName.equals("String")) {
            String[] temp = new String[n];
            for (int i = 0; i < n; i++) {
                temp[i] = myArray[i].toString();
                // System.out.println(temp[i]);
            }
            return (Item[])temp;
        } else if (itemName.equals("Double")) {
            Double[] temp = new Double[n];
            for (int i = 0; i < n; i++) {
                temp[i] = Double.valueOf(myArray[i].toString());
                // System.out.println(temp[i]);
            }
            return (Item[])temp;
        }
        return null;
    }

    public static void main(String[] args) {
        System.out.println("**********************元素为int********************************");
        Queue<Integer> queue1 = new Queue<Integer>();
        System.out.println("The first capacity of queue1 is " + queue1.getCapacity());
        queue1.push(1);
        queue1.push(2);
        queue1.push(3);
        System.out.println("The second capacity of queue1 is " + queue1.getCapacity());
        System.out.println("The size of queue1 is " + queue1.size());
        queue1.printContent();
        System.out.println("**********************删除一个元素后********************************");
        queue1.pop();
        queue1.printContent();
        System.out.println("**********************删除一个元素后********************************");
        queue1.pop();
        queue1.printContent();
        System.out.println("**********************添加一个元素后********************************");
        queue1.push(16);
        queue1.printContent();
        //Integer[] in = (Integer[])queue1.content();
        Integer[] m = queue1.content();
        for (int i = 0; i < queue1.size(); i++) {
            System.out.println(m[i]);
        }
        System.out.println("**********************************************************");
        Queue<Integer> queue2 = new Queue<Integer>(5);
        System.out.println("The first capacity of queue2 is " + queue2.getCapacity());
        queue2.push(4);
        queue2.push(5);
        queue2.push(6);
        System.out.println("The second capacity of queue2 is " + queue2.getCapacity());
        System.out.println("The size of queue2 is " + queue2.size());
        queue2.printContent();
        System.out.println("********************元素为字符串******************************");
        Queue<String> queue3 = new Queue<String>();
        queue3.push("nihao");
        queue3.push("haha");
        queue3.push("zdjd");
        String[] mm = queue3.content();
        for (int i = 0; i < queue3.size(); i++) {
            System.out.println(mm[i]);
        }
        System.out.println("********************元素为double******************************");
        Queue<Double> queue4 = new Queue<Double>();
        Double x1 = new Double("5.666");
        queue4.push(x1);
        Double x2 = new Double("-5.666");
        queue4.push(x2);
        Double[] mmm = queue4.content();
        for (int i = 0; i < queue4.size(); i++) {
            System.out.println(mmm[i]);
        }
    }
}

循环链表的结构如下:
这里写图片描述

从零开始:用ADS 2023手把手教你设计2.4GHz Wi-Fi LNA(基于ATF-54143,附模型文件) 本文详细介绍了如何使用ADS 2023软件设计2.4GHz Wi-Fi频段的低噪声放大器(LNA),基于ATF-54143晶体管。内容涵盖模型导入、直流工作点确定、稳定性优化、噪声匹配等关键步骤,并提供可下载的模型文件包,帮助工程师快速掌握LNA设计技巧。 阅读详情

相关推荐

stm32h743 FM25CL64铁电存储器踩坑记录

调试FRAM经验总结: 1、跑完FRAM读写代码之后,逻分仪发现总线上只有简单、短暂的电平变化,明显不是SPI的通信数据。 (经提醒发现连片选拉高拉低都没有执行到位) 后来发现是因为片选引脚没有初始化,所以直接拉高拉低是无效的。 2、引脚成功初始化后发现CLK、MISO、MOSI数据仍不正常。通过加打印的方式发现跑到HAL_SPI_Transmit中之后还没有执行到写SPI数据寄存器的那一步就return了。 后来经提醒发现: 上图中的指针使用方式错误 后来又发现: 打印出来发现

kuniqiw的博客 3844

java 全局队列_Java 全局队列

package com.abin.lee.queue;import java.util.Queue;public interface IMakeQueue {public void addQueue(Object obj);public boolean hasQueue();public Object getQueueHeader();public int queueSize();public b...

weixin_36389335的博客 1428

Aspose Java 25.10 版本深度破解:基于字节码修改的实战指南

本文提供了Aspose Java 25.10版本基于字节码修改的实战指南。详细介绍了如何通过Javassist工具逆向分析并修改Aspose Cells、Words、Slides及PDF组件的许可证验证逻辑,从而实现绕过限制,并完成最终的打包与功能验证。

stone的博客 1358

java队列(Queue)用法总结

1.队列的特点 队列是一种比较特殊的线性结构。它只允许在表的前端(front)进行删除操作,而在表的后端(rear)进行插入操作。进行插入操作的端称为队尾,进行删除操作的端称为队头。 队列中最先插入的元素也将最先被删除,对应的最后插入的元素将最后被删除。因此队列又称为“先进先出”(FIFO—first in first out)的线性表,与栈(FILO-first in last out)刚好相反...

bitcarmanlee的博客 6万+

立创开源:基于STM32F103与ADS1256的六维力传感器低成本实现方案

本文详细介绍了一种基于STM32F103微控制器与ADS1256高精度ADC的低成本六维力传感器实现方案。该方案通过3D打印的六梁弹性体结构结合应变片,将多维力信号转换为电信号,并由24位ADC进行高精度采集。文章涵盖了硬件选型、电路设计、嵌入式软件驱动及上位机数据可视化全流程,为机器人、精密测量等领域的爱好者提供了一个可复现的开源实践参考。

weixin_34718952的博客 390

(11)(2.2.2) BLHeli32,AM32, and BLHeli_S ESCs(一)

Ardupilot官网关于《Peripheral Hardware》的翻译 —《(2.2.2) BLHeli32,AM32, and BLHeli_S ESCs》。

无人机开发(开源Ardupilot) 2231

java中常用的队列

一、java中的队列 Queue: 基本上,一个队列就是一个先入先出(FIFO)的数据结构 Queue接口与List、Set同一级别,都是继承了Collection接口。LinkedList实现了Deque接口 二、非阻塞队列 非阻塞队列不能阻塞,多线程时,当队列满或者队列空时,只能使用队列wait(),notify()进行队列消息传送。 1. PriorityQueue PriorityQue...

一名小码农的博客 2万+

从零开始讲DDR(5)——读懂Datasheet

对于开发人员来说,需要根据实际场景和使用的需要,使用不同厂家,不同型号的DDR,虽然原理上大同小异,但是还是有一些细节上的需要注意的地方,接触一个新的DDR芯片,首先就是需要找到对应的datasheet,而能都读懂datasheet,也是一个硬件工程师的必备技能。

apple_53311083的博客 5221

java队列实现(顺序队列、链式队列、循环队列)

1.顺序队列的实现 package lang; import java.io.Serializable; import java.util.Arrays; /** * @ClassName: ArrayQueue * @Description: 顺序队列 * @date 2014年1月20日 下午3:46:19 * @param */ public clas

jiutianhe的专栏 4万+

cursor AI代码编辑器IDE对接deepseek模型api;字节ai编辑器trae

参考: https://www.cursor.com/ https://platform.deepseek.com/https://www.cursor.com/下载安装后,注册账号登录即可 再高级里选择设置 再模型这注册模型: 模型名称一定要填正确,url地址填好,最后填上秘钥验证

weixin_42357472的博客 1万+

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

Java实现循环队列、栈实现队列、队列实现栈

本文介绍了队列的两种实现方式:循环队列和链式队列。循环队列通过数组实现,利用取模运算解决假溢出问题,包含入队、出队等基本操作。链式队列基于双向链表实现,具有灵活的内存管理特性。此外,文章还展示了如何用栈实现队列(通过两个栈反转元素顺序)以及用队列实现栈(借助辅助队列保留栈顶元素)。这些实现方式各具特点,体现了数据结构间的相互转换思想,为不同场景下的应用提供了灵活选择。

mingxunwwww的博客 1013

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

JAVA实现队列类

和栈一样,队列也是线性的集合。对于队列来说,插入限制在一端,也就是队尾,删除限制在另一端,也就是对头。队列支持先进先出的协议。 本文使用java中的数据和列表来实现队列类,从而更加详细和直观的理解队列的使用和性质。 1、使用数组实现队列 public class QueueWithArray { private int [] queueArray; private int front ...

qq_38375282的博客 2965

IDEA的使用指南

IDEA基于java的使用手册,可以最快速的上手,在使用中不断的丰富自己的使用技巧.

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

java实现队列_java实现队列

队列的定义队列的特点是节点的排队次序和出队次序按入队时间先后确定,即先入队者先出队,后入队者后出队。即我们常说的FIFO(first in first out)先进先出。顺序队列定义及相关操作顺序存储结构存储的队列称为顺序队列,内部使用一个一维数组存储,用一个队头指针front指向队列头部节点(即使用int类型front来表示队头元素的下标),用一个队尾指针rear,指向队列尾部元素(int类型r...

weixin_39633165的博客 737

用java实现队列

2.2简单队列 对列是一种有序列表,可以通过数组或者是链表来实现。 队列遵循着先入先出的原则(FIFO) 在队列里,我们常常用front来表示队列开头的元素,rear来表示队列最后一个元素。 rear会随着输入而变化,front会随着输出而变化。 2.2.1.思路分析 当我们将数据存入队列时称为”addQueue",addQueue的处理需要有两个步聚:思路分析 将尾指针往后移: rear+1,当front == rear 【空】 若尾指针rear小于队列的最大下标maxSize-1,则将数据存入rear

abaidaye的博客 1212

java队列实现

个人理解:   java中队列的数组实现,入队在数组尾部添加,出队删除并返回数组首元素,其他元素位置前进1位,获取获取队尾元素。   队列的“linkedList”实现采用双栈min、mout,入队时候从mout倒入min然后把元素入栈min,出队从min倒入mout元素从mout出栈。 转载请注明出处:http://www.cnblogs.com/skywang12345...

a662852186的博客 270

Java栈和队列的实现

Java栈和队列的实现

2301_80288511的博客 896

Java之数组实现队列

使用数组实现顺序队列、环形队列,包括队列的介绍、思路分析、示意图和代码实现。

zavier的乌托邦 449

队列之Java实现循环队列

什么是队列?队列(queue)又叫先进先出表,它是一种运算受限的线性表。其限制是只允许在表的一端进行插入数据和另一端取数据。插入数据的一端是队尾,取数据的一端是队头。队列的数据结构:数组或者链表实现队列的常用场景:生产者生产数据放入队列缓存,消费者去消费数据。

Shen_Dong的博客 1611

Java用ArrayList实现队列

发布文章测试

Java程序猿1只 2600

用栈实现队列 && 队列实现栈(Java)

思路:最新来的一定要在出栈口(一个个叠加),用que2作为存放新来的队列。解释:每次push新元素时,都将其放入一个空队列,然后将另一个队列的所有元素转移到这个队列中,最后交换两个队列的引用。基本思路:使用两个栈(输入栈和输出栈共同完成一个队列),保证把进栈数据全部导入到输出栈(注意是全部导入)。写博客的目的是每日督促并记录刷题,也欢迎大家批评指正~(day12)注意:在push方法里就要随时进行这种变化。注意:将相近功能的代码抽象出来。

m0_72833525的博客 782

Java实现队列

队列只允许在一端进行插入,在另一端进行删除数据操作的特殊线性表,队列遵循先进先出FIFO(FIrst In First Out)的原则。入队列:进行插入操作的一端称为队尾(Tail/Rear)出队列:进行删除操作的一端称为队头(Head/Front)举例:食堂打饭排队,排在前面的先离开,排在后面的后离开。

2301_76515294的博客 1534

Java中循环队列实现_Java循环队列的实现方法

Java循环队列的实现方法时间:2017-09-13来源:华清远见JAVA学院生活中有很多队列的影子,比如打饭排队,买火车票排队问题等,可以说与时间相关的问题,一般都会涉及到队列问题。那么Java如何实现循环队列呢?今天华清Java学院小编就以Java如何用数组实现循环队列为例,和大家分享一下Java循环队列的实现方法。Java循环队列的实现代码如下:1、队列的类class CirQue...

weixin_31459297的博客 2251

Java实现栈与队列

本文详细介绍了Java中栈和队列这两种数据结构的实现原理与应用场景。文章首先讲解了栈的后进先出(LIFO)特性,通过数组和链表两种方式实现栈结构,并分析了栈在递归转循环、括号匹配、逆波兰表达式等场景的应用。随后介绍了队列的先进先出(FIFO)特性及其实现方式,重点讨论了循环队列和双端队列这两种特殊队列的实现原理。最后通过LeetCode题目示例,展示了如何用队列实现栈和用栈实现队列的相互转换方法,提供了完整的代码实现。全文通过理论讲解与代码实践相结合的方式,帮助读者深入理解这两种基础数据结构的特点与应用。

su17643217590的博客 6737

java 双端队列的实现_java实现双端队列

双端队列接口public interface DequeInterface {public void addToFront(T newEntry);public void addToBack(T newEntry);public T removeFront();public T removeBack();public T getFront();public T getBack();public b...

weixin_34131379的博客 661
上一篇: 基于Java的栈实现
下一篇: 基于java的集合实现
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值