java编程队列数据结构代码示例

下面是“Java编程队列数据结构代码示例”的完整攻略。

什么是队列

队列是一种有序的数据结构,特点是先进先出(FIFO)。队列中不管是插入操作还是删除操作,都是在队列的两端进行的,插入操作在队列的尾部进行,删除操作在队列的头部进行。队列的一个重要用途是在计算机的操作系统中,实现进程和所有需要等待资源的实体之间的交互。

队列的实现

队列数据结构可以采用数组或链表两种方式进行实现。

如果使用数组实现队列,需要提前设定一个合理的大小,具有固定的容量,同时需要用一个变量来记录队列当前元素的数量。

如果使用链表实现队列,既可以实现单向链表,也可以实现双向链表。

Java代码示例

下面是一个Java用数组实现的队列数据结构的代码示例:

public class MyQueue {
    private int capacity;   // 队列容量
    private int[] queueArr; // 队列数组
    private int head;       // 队列头部
    private int tail;       // 队列尾部
    private int currentSize;// 队列当前大小

    public MyQueue(int queueSize){
        this.capacity = queueSize;
        queueArr = new int[this.capacity];
        head = 0;
        tail = -1;
        currentSize = 0;
    }

    public void enqueue(int item) {
        if (isQueueFull()) {
            System.out.println("Overflow ! Unable to add element: "+item);
        } else {
            tail++;
            if(tail == capacity-1){
                tail = 0;
            }
            queueArr[tail] = item;
            currentSize++;
            System.out.println("Element " + item+ " is pushed to Queue !");
        }
    }

    public void dequeue() {
        if (isQueueEmpty()) {
            System.out.println("Underflow ! Unable to remove element from Queue");
        } else {
            head++;
            if(head == capacity-1){
                System.out.println("Pop operation done ! removed: "+queueArr[head-1]);
                head = 0;
            } else {
                System.out.println("Pop operation done ! removed: "+queueArr[head-1]);
            }
            currentSize--;
        }
    }

    public boolean isQueueFull(){
        boolean status = false;
        if (currentSize == capacity){
            status = true;
        }
        return status;
    }

    public boolean isQueueEmpty(){
        boolean status = false;
        if (currentSize == 0){
            status = true;
        }
        return status;
    }
}

这个队列数据结构的实现包括一下功能:

  • 创建队列
  • 向队列尾部加入元素
  • 从队列头部删除元素
  • 判断队列是否已满
  • 判断队列是否为空

下面是例子:

MyQueue queue = new MyQueue(5);
queue.enqueue(12);
queue.enqueue(22);
queue.enqueue(32);
queue.enqueue(42);
queue.dequeue();
queue.dequeue();

这个例子向队列中加入了四个元素(12,22,32和42),然后将前两个元素删除。最后队列中应该有两个元素(32和42)。

下面是Java用链表实现的队列数据结构的代码示例:

public class MyQueue {  
    private ListNode front;  
    private ListNode rear;  
    private int length;  

    private class ListNode {  
        int val;  
        ListNode next;  

        ListNode(int x) {  
            val = x;  
            next = null;  
        }  
    }  

    public MyQueue(){  
        front = null;  
        rear = null;  
        length = 0;  
    }  

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

    public int peek(){  
        if (isEmpty()) {  
            throw new RuntimeException("Queue underflow!");  
        }  
        return front.val;  
    }  

    public void enqueue(int n){  
        ListNode newNode = new ListNode(n);  
        if (rear == null) {  
            front = newNode;  
            rear = newNode;  
        }else {  
            rear.next = newNode;  
            rear = newNode;  
        }  
        length++;  
    }  

    public int dequeue(){  
        if (isEmpty()) {  
            throw new RuntimeException("Queue underflow!");  
        }  
        int result = front.val;  
        front = front.next;  
        if (front == null) {  
            rear = null;  
        }  
        length--;  
        return result;  
    }  
}  

这个队列数据结构的实现包括一下功能:

  • 创建队列
  • 判断队列是否为空
  • 返回队列顶部元素
  • 将元素添加到队列尾部
  • 从队列头部删除元素

下面是一个例子:

MyQueue queue = new MyQueue();
queue.enqueue(10);
queue.enqueue(20);
queue.enqueue(30);
System.out.println("Dequeue Operation : Dequeued Element : "+queue.dequeue());

在这个例子中,我们向这个队列中添加了三个元素(10、20和30),然后删除了队列中的第一个元素10。此时队列中应该有两个元素(20和30)。

希望这个攻略对你有所帮助!

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:java编程队列数据结构代码示例 - Python技术站

(0)
上一篇 2023年5月17日
下一篇 2023年5月17日

相关文章

  • Python内存管理器如何实现池化技术

    Python内存管理器使用了池化技术来进行内存管理,这使得Python程序的内存管理效率比较高。下面我将详细介绍Python内存管理器如何实现池化技术: 1. 内存分配 Python内存管理器在Python运行时,会维护多个大小不同的内存块池,每个池的大小相同。当Python程序需要分配内存时,会首先在池中寻找是否有剩余内存块可以分配。如果有,则分配给程序使…

    数据结构 2023年5月17日
    00
  • Redis高效率原因及数据结构分析

    Redis高效率原因及数据结构分析 Redis高效率的原因 Redis是一款高性能、高可靠性的内存数据库,其高效率的原因主要体现在以下几个方面: 1. 内存存储 Redis数据完全存储在内存中,而不是像传统的关系型数据库一样存储在磁盘中。内存的读写速度要远远快于磁盘的读写速度,因此Redis在数据读写时的速度非常快,能够达到每秒钟数百万次的读写操作。 2. …

    数据结构 2023年5月17日
    00
  • 一文学会数据结构-堆

    一文学会数据结构-堆 什么是堆 在计算机科学中,堆是一个特殊的树状数据结构。堆通常有如下几个特性: 堆是完全二叉树; 堆中每个节点的值都大于或等于(小于或等于)其子节点的值,这个取值规则称为堆的“属性”; 堆顶元素(即根节点)总是为最大值或最小值。 堆的种类 堆分为小根堆和大根堆两种。小根堆要求每个节点的值都不大于其父节点的值,即A[PARENT[i]] &…

    数据结构 2023年5月17日
    00
  • Java数据结构之有向图的拓扑排序详解

    下面我将为您详细讲解“Java数据结构之有向图的拓扑排序详解”的完整攻略。 拓扑排序概述 拓扑排序是一种常见的有向无环图(DAG)的排序方法,该算法将DAG图中所有节点排序成一个线性序列,并且使得所有的依赖关系都满足从前向后的顺序关系。一般来说,DAG图的所有节点可以表示为一个任务依赖关系,而拓扑排序则可以对这些任务进行排序,确保每个任务在它所依赖的任务之后…

    数据结构 2023年5月17日
    00
  • 虹科案例 | 虹科Domo商业智能,助力保险公司逃离繁杂数据池!

    金融行业的发展充满着不确定性,一个具备强大承保能力和精算专业知识的资金池,对于身处该领域的公司和个人都是十分必要的。 在全国城市联盟(NLC)的协助下成立的NCL Mutual会员制互助保险公司,为各个地区城市提供了稳定的再保险答案。,然而,面对数字化转型这场已经打响的战斗,NCL Mutual却因缺乏中心商业智能系统,在利用数据处理索赔和承保的能力受到了极…

    算法与数据结构 2023年4月17日
    00
  • java数据结构实现顺序表示例

    如果想要实现一种数据结构,我们首先需要考虑它的存储结构。对于顺序存储结构,Java中的数组是一个很好的选择。下面就为大家分享关于Java数据结构实现顺序表示例的完整攻略,帮助读者更好地理解该数据结构的实现方式。 1. 定义一个顺序表数组 首先,我们需要定义一个数组类型的顺序表。这个顺序表可以使用泛型来表示各种类型的数据: public class MyArr…

    数据结构 2023年5月17日
    00
  • C语言数据结构中定位函数Index的使用方法

    C语言的数据结构中,定位函数Index的使用方法主要涉及到数组和指针的相关操作。Index函数的作用是在数组中查找对应的元素,返回该元素的索引位置。以下是详细攻略: 一、Index函数的用法 Index函数的原型如下: void *index(const void *s, int c, size_t n); 其中,参数含义如下: s: 要查找的数组 c: 要…

    数据结构 2023年5月17日
    00
  • Python实现的数据结构与算法之双端队列详解

    Python实现的数据结构与算法之双端队列详解 什么是双端队列? 双端队列是一种具有队列和栈的性质的数据结构,可以在队列两端进行插入和删除操作。双端队列可以实现两端的操作,因此可以在队列两端进行插入和删除操作,既可以像队列一样先进先出,也可以像栈一样后进先出。 双端队列的操作 add_front(item):在队头插入一个元素; add_rear(item)…

    数据结构 2023年5月17日
    00
合作推广
合作推广
分享本页
返回顶部