📜  Java程序实现队列数据结构(1)

📅  最后修改于: 2023-12-03 15:32:05.119000             🧑  作者: Mango

Java程序实现队列数据结构

简介

队列是一种常用的数据结构,它采用先进先出(FIFO)的策略,可以用于很多场合,例如模拟系统调度等。本文将会介绍如何使用Java语言实现队列数据结构,并提供代码示例供读者参考。

队列的基本操作

队列的基本操作包括:

  • enqueue(item):将一个元素添加到队列尾部
  • dequeue():删除队列头部的元素并返回它
  • isEmpty():判断队列是否为空
  • isFull():判断队列是否已满
  • peek():查看队列头部的元素但不删除它
用数组实现队列

数组是最简单的队列实现方案之一。我们可以定义一个数组来存储元素,使用两个指针frontrear分别指向队头和队尾,来实现队列的各种操作。但这种实现有一个明显的缺点,就是当队列满时,无法继续添加元素。我们可以通过循环队列的方式来解决这个问题。

以下是用数组实现队列的示例代码:

public class ArrayQueue {
    private int maxSize; // 队列最大容量
    private int front;  // 队列头部指针
    private int rear;   // 队列尾部指针
    private int[] array; // 存储队列元素的数组

    public ArrayQueue(int maxSize) {
        this.maxSize = maxSize;
        this.front = 0;
        this.rear = 0;
        this.array = new int[maxSize];
    }

    public void enqueue(int item) {
        if (isFull()) {
            throw new RuntimeException("Queue is full");
        }
        array[rear] = item;
        rear = (rear + 1) % maxSize; // 循环队列
    }

    public int dequeue() {
        if (isEmpty()) {
            throw new RuntimeException("Queue is empty");
        }
        int item = array[front];
        front = (front + 1) % maxSize; // 循环队列
        return item;
    }

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

    public boolean isFull() {
        return (rear + 1) % maxSize == front;
    }

    public int peek() {
        if (isEmpty()) {
            throw new RuntimeException("Queue is empty");
        }
        return array[front];
    }
}
用链表实现队列

链表是另一种常用的队列实现方案,与数组不同,它不需要预先指定队列的容量。我们可以定义一个Node类作为队列元素的节点,使用一个指针tail指向队列尾部,来实现队列的各种操作。

以下是用链表实现队列的示例代码:

public class LinkedQueue {
    private Node tail; // 队列尾部指针

    public void enqueue(int item) {
        Node node = new Node(item);
        if (isEmpty()) {
            tail = node;
            return;
        }
        tail.next = node;
        tail = node;
    }

    public int dequeue() {
        if (isEmpty()) {
            throw new RuntimeException("Queue is empty");
        }
        int item = tail.next.val;
        tail.next = tail.next.next;
        if (tail.next == null) {
            tail = null;
        }
        return item;
    }

    public boolean isEmpty() {
        return tail == null;
    }

    public int peek() {
        if (isEmpty()) {
            throw new RuntimeException("Queue is empty");
        }
        return tail.next.val;
    }

    private static class Node {
        int val;
        Node next;

        Node(int val) {
            this.val = val;
        }
    }
}
总结

本文介绍了如何使用Java语言实现队列数据结构,并提供了数组和链表两种常用的队列实现方案及示例代码。程序员在实际编程中可以根据具体情况选择合适的实现方案,以满足系统需求。