📅  最后修改于: 2023-12-03 15:32:05.119000             🧑  作者: Mango
队列是一种常用的数据结构,它采用先进先出(FIFO)的策略,可以用于很多场合,例如模拟系统调度等。本文将会介绍如何使用Java语言实现队列数据结构,并提供代码示例供读者参考。
队列的基本操作包括:
enqueue(item)
:将一个元素添加到队列尾部dequeue()
:删除队列头部的元素并返回它isEmpty()
:判断队列是否为空isFull()
:判断队列是否已满peek()
:查看队列头部的元素但不删除它数组是最简单的队列实现方案之一。我们可以定义一个数组来存储元素,使用两个指针front
和rear
分别指向队头和队尾,来实现队列的各种操作。但这种实现有一个明显的缺点,就是当队列满时,无法继续添加元素。我们可以通过循环队列的方式来解决这个问题。
以下是用数组实现队列的示例代码:
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语言实现队列数据结构,并提供了数组和链表两种常用的队列实现方案及示例代码。程序员在实际编程中可以根据具体情况选择合适的实现方案,以满足系统需求。