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日

相关文章

  • C语言数据结构之复杂链表的拷贝

    C语言数据结构之复杂链表的拷贝 什么是复杂链表 在了解如何拷贝复杂链表之前,首先需要知道什么是复杂链表。复杂链表是由多个节点组成的链表,每个节点除了包含普通链表节点的值和指向下一个节点的指针外,还包含一个指向链表中的任意一个节点的指针。因此,每个节点有两个指针:一个指向下一个节点,一个指向任意一个节点。 复杂链表示意图如下: +—+ +—+ +—…

    数据结构 2023年5月17日
    00
  • Java数据结构之有向图设计与实现详解

    Java数据结构之有向图设计与实现详解 什么是有向图 有向图是一种图形结构,其中每一个节点都有一个方向,即它指向或被其他节点指向。有向图可以用来表示许多实际问题,如路线、依赖关系、状态转移等。 有向图的基本概念 在有向图中,每一个节点都有一个唯一的标识符,被称为节点ID。如果从节点A到节点B存在一条有向边,则称B是A的后继节点,A是B的前驱节点。节点的度数是…

    数据结构 2023年5月17日
    00
  • 数据结构 C语言实现循环单链表的实例

    首先,在开始讲解数据结构中循环单链表的实现前,需要明确循环单链表的概念以及其与单链表的区别。 循环单链表是一种链式存储结构,与单链表不同的是,在循环单链表的尾部也可以指向链表的头部,形成一个环。因此,我们可以通过尾部的指针来遍历整个循环单链表。 接下来,为了方便理解和学习,我们将使用C语言来实现循环单链表的实例。下面分几个步骤来讲解。 1. 定义结构体和创建…

    数据结构 2023年5月17日
    00
  • 使用C语言详解霍夫曼树数据结构

    使用C语言详解霍夫曼树数据结构 什么是霍夫曼树 霍夫曼树是一种带权路径长度最短的树,也称为最优二叉树,它是优化编码的核心算法。 在霍夫曼树中,每个叶子节点对应一个字符,该节点的权值为该字符出现的次数。当然,字符可以是任何数据类型。生成霍夫曼树后,在对每个字符进行编码时,字符在霍夫曼树中的路径即为其编码。(一般规定,一条从根到叶子的路径上只出现0或1,从根到某…

    数据结构 2023年5月17日
    00
  • C++数据结构之单链表的实现

    C++数据结构之单链表的实现可分为以下步骤: 1. 定义链表节点类 链表节点类需要包含两个成员变量,一个是存储数据的变量,另一个是指向下一个节点的指针变量。同时,需要实现构造函数和析构函数。 class Node{ public: int data; // 存储节点数据 Node* next; // 指向下一个节点的指针 Node(int data):dat…

    数据结构 2023年5月17日
    00
  • C语言全面梳理结构体知识点

    C语言全面梳理结构体知识点 什么是结构体? 结构体是一种自定义的数据类型,它可以包含多个不同类型的成员变量,并且这些成员变量可以通过一个变量名来访问。结构体的定义需要使用关键字struct,并且需要指定结构体的类型名和成员变量。例如: struct Person { char name[20]; int age; float height; }; 以上代码就…

    数据结构 2023年5月17日
    00
  • 「线段树」!(简单)的线段树

    本题为3月20日23上半学期集训每日一题中B题的题解 题面 题目描述 给你一个序列 \(A[1],A[2],…,A[n]\) .( \(|A[i]| \leq 15007, 1 \leq N \leq 50,000\) ). M( \(1 \leq M \leq 500,000\) ) 次询问,每次询问 \(Query(x, y) = Max{A[i] …

    算法与数据结构 2023年4月18日
    00
  • Java数据结构与算法入门实例详解

    Java数据结构与算法入门实例详解攻略 概述 本攻略主要介绍Java数据结构与算法入门实例详解,包括学习的目标、适合的人群、学习方法等。通过本攻略的学习,可以更好地掌握Java数据结构和算法的基本知识,提升编程水平。 学习目标 本攻略的学习目标为: 掌握Java基础数据结构,如数组、链表、栈、队列等; 理解并掌握常见算法,如排序、查找、递归等; 掌握Java…

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