Java实现先进先出(FIFO)队列

先进先出(FIFO)是一种常见的数据结构,它类似于现实生活中排队的原则,即先进入队列的元素将首先被处理。在Java中,我们可以使用数组或链表来实现FIFO队列。本文将详细介绍如何使用数组实现FIFO队列,并提供相应的源代码。

首先,我们需要定义一个FIFO队列的类,包含以下几个核心方法:

  1. enqueue(element):将一个元素添加到队列的末尾。
  2. dequeue():移除并返回队列的第一个元素。
  3. isEmpty():检查队列是否为空。
  4. isFull():检查队列是否已满。
  5. size():返回队列中元素的数量。

以下是使用数组实现FIFO队列的完整代码:

public class FIFOQueue {
    private int[] queueArray;
    private int front;
    private int rear;
    private int maxSize;

    public FIFOQueue(int size) {
        maxSize = size;
        queueArray = new int[maxSize];
        front = 0;
        rear = -1;
    }

    public void enqueue(int element) {
        if (isFull()) {
            System.out.println("队列已满,无法添加新元素。");
            return;
        }
        rear++;
        queueArray[rear] = element;
    }

    public int dequeue() {
        if (isEmpty()) {
            System.out.println("队列为空,无法移除元素。");
            return -1;
        }
        int removedElement = queueArray[front];
        front++;
        return removedElement;
    }

    public boolean isEmpty() {
        return (front > rear);
    }

    public boolean isFull() {
        return (rear == maxSize - 1);
    }

    public int size() {
        return rear - front + 1;
    }
}

在上述代码中,我们使用一个整型数组 queueArray 来存储队列的元素,frontrear 分别表示队列的前端和后端的索引,maxSize 是队列的最大容量。

enqueue 方法中,我们首先检查队列是否已满,如果已满则无法添加新元素。如果队列未满,我们将 rear 索引递增,并将新元素添加到 rear 索引位置。

dequeue 方法中,我们首先检查队列是否为空,如果为空则无法移除元素,我们返回 -1 来表示出错。如果队列非空,我们将从队列的前端开始移除元素,并将 front 索引递增。

isEmpty 方法通过检查 front 是否大于 rear 来判断队列是否为空,isFull 方法通过检查 rear 是否等于 maxSize - 1 来判断队列是否已满。size 方法返回队列中元素的数量,即 rear - front + 1

下面是使用上述 FIFOQueue 类的示例代码:

public class Main {
    public static void main(String[] args) {
        FIFOQueue queue = new FIFOQueue(5);

        queue.enqueue(10);
        queue.enqueue(20);
        queue.enqueue(30);

        System.out.println("队列大小: " + queue.size());

        System.out.println("移除元素: " + queue.dequeue());
        System.out.println("移除元素: " + queue.dequeue());

        System.out.println("队列是否为空: " + queue.isEmpty());
        System.out.println("队列是否已满: " + queue.isFull());
    }
}

输出结果为:

队列大小: 3
移除元素: 10
移除元素: 20
队列是否为空: false
队列是否已满: false

以上就是使用Java实现FIFO队列的详细内容和源代码。你可以根据自己的需求使用该队列实现各种应用场景中的先进先出处理逻辑。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Java先进先出调度算法(First-Come, First-Served Scheduling Algorithm)是一种简单的进程调度算法,按照进程到达的顺序进行调度。当一个进程到达后,它会被放入就绪队列的末尾,然后按照队列的顺序依次执行。直到进程执行完毕或者发生阻塞,才会让出CPU资源给下一个进程。 以下是一个Java实现先进先出调度算法的示例代码: ```java import java.util.LinkedList; import java.util.Queue; class Process { private String name; private int burstTime; public Process(String name, int burstTime) { this.name = name; this.burstTime = burstTime; } public String getName() { return name; } public int getBurstTime() { return burstTime; } } public class FCFS { public static void main(String[] args) { Queue<Process> readyQueue = new LinkedList<>(); // 创建进程 Process p1 = new Process("P1", 10); Process p2 = new Process("P2", 5); Process p3 = new Process("P3", 8); // 将进程加入就绪队列 readyQueue.add(p1); readyQueue.add(p2); readyQueue.add(p3); // 执行进程 while (!readyQueue.isEmpty()) { Process currentProcess = readyQueue.poll(); System.out.println("执行进程:" + currentProcess.getName()); // 模拟进程执行 try { Thread.sleep(currentProcess.getBurstTime() * 1000); } catch (InterruptedException e) { e.printStackTrace(); } System.out.println("进程执行完毕:" + currentProcess.getName()); } } } ``` 该示例中,我们创建了三个进程,并按照先后顺序加入就绪队列。然后通过循环依次执行队列中的进程,模拟进程执行的过程。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值