首页 > 编程语言 >Java实现队列

Java实现队列

时间:2022-10-11 12:01:12浏览次数:60  
标签:capacity enQueue 队列 next queue 实现 Java public size

队列是典型的FIFO数据结构。入队(队尾添加),出队(队首删除)。

定义队列接口

public interface Queue<T> {

    boolean enQueue(T t);

    T deQueue();

    int size();
}

数组实现队列

public class MyArrayQueue<T> implements Queue<T> {
    private final int capacity;
    private int size;
    private final T[] list;
    private int head;
    private int tail;

    public MyArrayQueue() {
        this.capacity = 10;
        list = (T[]) new Object[capacity];
    }

    public MyArrayQueue(int capacity) {
        this.capacity = capacity;
        list = (T[]) new Object[capacity];
    }

    @Override
    public boolean enQueue(T t) {
        if (size >= capacity) {
            return false;
        }
        list[tail++] = t;
        tail = tail % capacity;
        size++;
        return true;
    }

    @Override
    public T deQueue() {
        if (size < 0) {
            return null;
        }
        T remove = list[head++];
        head = head % capacity;
        size--;
        return remove;
    }

    @Override
    public int size() {
        return size;
    }

链表实现队列

public class MyListQueue<T> implements Queue<T> {
    private int size;
    private final int capacity;
    private final ListNode<T> head = new ListNode<>();
    private ListNode<T> tail = head;

    public MyListQueue() {
        this.capacity = 10;
    }

    public MyListQueue(int capacity) {
        this.capacity = capacity;
    }

    @Override
    public boolean enQueue(T t) {
        if (size >= capacity) {
            return false;
        }
        ListNode<T> newNode = new ListNode<>(t, tail.next);
        tail.next = newNode;
        tail = newNode;
        size++;
        return true;
    }

    @Override
    public T deQueue() {
        if (size <= 0) {
            return null;
        }
        ListNode<T> next = head.next;
        head.next = next.next;
        size--;
        return next.data;
    }

    @Override
    public int size() {
        return size;
    }

    static class ListNode<T> {
        T data;
        ListNode<T> next;

        public ListNode() {
        }

        public ListNode(T data, ListNode<T> next) {
            this.data = data;
            this.next = next;
        }
    }
}

测试

public static void main(String[] args) {
        //        Queue<Integer> queue = new MyArrayQueue<>(3);
        Queue<Integer> queue = new MyListQueue<>(3);
        queue.enQueue(1);
        queue.enQueue(2);
        queue.enQueue(3);
        queue.enQueue(4);
        queue.enQueue(5);
        System.out.println(queue.deQueue());
        System.out.println(queue.deQueue());
        queue.enQueue(21);
        System.out.println(queue.deQueue());
        queue.enQueue(22);
        queue.enQueue(23);
        queue.enQueue(24);

        while (queue.size() > 0) {
            System.out.println(queue.deQueue());
        }
    }

标签:capacity,enQueue,队列,next,queue,实现,Java,public,size
From: https://www.cnblogs.com/bakanano/p/16778762.html

相关文章

  • ACWing Java基础语法记录-类与接口
    类可以将变量、函数完美地打包在一起。类与对象类定义一种全新的数据类型,包含一组变量和函数;对象是类这种类型对应的实例。解释:例如在一间教室中,可以将'Student'定义成......
  • JavaScript高级程序设计笔记06 集合引用类型
    集合引用类型1.Object(详见c08p205)适合存储,在应用程序间交换数据创建实例:a.显式构造函数b.字面量——>不会调用构造函数(代码更少、更有封装感)函数:大量参数的情况......
  • shell实现接口初次失败告警,恢复也发送一次通知
    1、该shell判断第一次失败告警,接口恢复发送一次通知参数:一个参数接口返回结果0表示成功1表示失败脚本详情[root@localhostbd]#morebd-new.sh#!/bin/bashw=$(c......
  • Windows 7样式地址栏(Address Bar)控件实现
    介绍从Vista开始,地址栏就有了很大的改变,不知道大家有什么感觉,笔者觉得很方便,同时又兼容之前的功能,是个很不错的创新。不过,微软并不打算把这一很酷的功能......
  • 「Java 数据结构」:手撕单链表的增删改查及大厂面试题。
    目录​​一、单链表的增删改查​​​​1、创建结点     ​​​​2、单链表的添加操作​​​​3、单链表的删除操作​​​​4、单链表的有效结点的个数​​​​二、......
  • JAVA数据类型
    JAVA数据类型基本数据类型数值类型整数型byte:一个字节short:两个字节int:四个字节long:八个字节注意:二进制0b 十进制 八进制0 十六进制0xlong类型要在数......
  • Java拦截器
    (1)浏览器发送一个请求会先到Tomcat的web服务器(2)Tomcat服务器接收到请求以后,会去判断请求的是静态资源还是动态资源(3)如果是静态资源,会直接到Tomcat的项目部署目录下......
  • 实现ls-myls
    ls简介用manls命令查看ls的具体功能可以看出ls的功能是列出关于文件的信息。添加不同的后缀,可以以不同的形式输出-a:显示所有档案及目录(ls内定将档案名或目录名称......
  • Java 中初始化 List 的五种方法
    1、构造List后使用List.add初始化1List<String>stringList=newLinkedList<>();2stringList.add("a");3stringList.add("b");4stringList.add("c");这是......
  • Java Style的C++容器流式处理类
    很久没有上博客园了,最近一段时间,因为工作的关系时间上比较闲,利用闲暇时间重新翻了一下丢弃很久的C++语言。C++从98、11、14、17目前已经也走到了20版本,发生了很多变化,也引......