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日

相关文章

  • 【牛客小白月赛70】A-F题解【小d和超级泡泡堂】【小d和孤独的区间】【小d的博弈】【小d和送外卖】

    比赛传送门:https://ac.nowcoder.com/acm/contest/53366 难度适中。 ? 作者:Eriktse? 简介:19岁,211计算机在读,现役ACM银牌选手?力争以通俗易懂的方式讲解算法!❤️欢迎关注我,一起交流C++/Python算法。(优质好文持续更新中……)?? 阅读原文获得更好阅读体验:https://www.erikt…

    算法与数据结构 2023年4月17日
    00
  • 一文带你走进js数据类型与数据结构的世界

    一文带你走进JS数据类型与数据结构的世界 一、JS数据类型 1. 原始类型 JS中原始类型包括:Undefined、Null、Boolean、Number、String、Symbol(ES6新增)。 其中Undefined和Null分别代表未定义和空值,Boolean表示布尔值,Number表示数字,String表示字符串,Symbol是ES6新增的一种基础…

    数据结构 2023年5月17日
    00
  • JavaScript 数据结构之集合创建(1)

    当我们在编写JavaScript程序时,有时需要使用数据结构来组织和表示数据。其中之一是集合,它是一组无序且唯一的项的集合。这里就介绍如何在JavaScript中创建集合。 1. 集合定义 集合是一种不同于数组或对象,由一组彼此无关的元素组成的数据结构。集合中的元素是唯一的,即不允许重复元素。 2. 集合的操作 JavaScript中的集合可以支持以下常见操…

    数据结构 2023年5月17日
    00
  • Go语言数据结构之单链表的实例详解

    Go语言数据结构之单链表的实例详解 简介 单链表是一个常见的数据结构,它由一系列节点组成,每个节点包含一个值和指向下一个节点的引用。单链表的插入和删除操作比较容易,但是访问操作的效率相对较低。 在Go语言中,可以使用结构体配合指针来实现单链表。 实现思路 为了实现单链表,需要先定义一个节点结构体Node,包含一个value值和一个next指针。通过next指…

    数据结构 2023年5月17日
    00
  • 使用C语言构建基本的二叉树数据结构

    下面是使用C语言构建二叉树数据结构的步骤和示例: 1. 定义二叉树结构体类型 定义一个二叉树的结构体,包含节点值、左右子节点等信息: typedef struct TreeNode { int val; struct TreeNode* left; struct TreeNode* right; } TreeNode; 2. 实现创建二叉树的函数 实现一个函…

    数据结构 2023年5月17日
    00
  • C语言数据结构之队列的定义与实现

    C语言数据结构之队列的定义与实现 什么是队列 队列是一种特殊的线性数据结构,它只允许在队列的头部进行删除操作,在队列的尾部进行插入操作,这种操作方式被成为“先进先出”或“FIFO(first in first out)”。 队列的实现方式 队列可以通过数组和链表两种方式进行实现。 1. 数组实现 数组实现队列时,可以定义一个存放元素的数组,同时需要记录队列的…

    数据结构 2023年5月17日
    00
  • 【ACM算法竞赛日常训练】DAY10题解与分析【月月给华华出题】【华华给月月出题】| 筛法 | 欧拉函数 | 数论

    DAY10共2题: 月月给华华出题 华华给月月出题 难度较大。 ? 作者:Eriktse? 简介:211计算机在读,现役ACM银牌选手?力争以通俗易懂的方式讲解算法!❤️欢迎关注我,一起交流C++/Python算法。(优质好文持续更新中……)?? 原文链接(阅读原文获得更好阅读体验):https://www.eriktse.com/algorithm/110…

    算法与数据结构 2023年4月17日
    00
  • C++超详细讲解单链表的实现

    首先我们来了解一下单链表的概念。 单链表是一种常见的数据结构,在计算机科学中被广泛使用。它是由节点所组成的数据结构,其中每个节点都包含两部分,一个是存储数据的元素,另一个是指向下一个节点的指针。单链表的首节点被称为头部,而最后一个节点则被称为尾部。单链表可以通过在头部插入和删除元素来实现高效地数据操作。接下来我们将讲解如何实现一个 C++ 版的单链表。 实现…

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