📅  最后修改于: 2023-12-03 15:08:26.557000             🧑  作者: Mango
队列(Queue)是计算机科学中的一种数据结构,它是一种先进先出(First In First Out,FIFO)的线性表。队列的基本操作包括入队(Enqueue)、出队(Dequeue)、取队首元素(Peek)等。
在Java中,使用数组和泛型可以很方便地实现队列。下面我们来介绍一下具体的实现方法。
数组实现队列的代码如下:
public class ArrayQueue<T> {
private T[] data;
private int size;
private int front, rear;
public ArrayQueue(int capacity) {
this.data = (T[])new Object[capacity];
this.size = 0;
this.front = 0;
this.rear = -1;
}
public void enqueue(T element) {
if (size == data.length) {
throw new RuntimeException("Queue is full.");
}
rear = (rear + 1) % data.length;
data[rear] = element;
size++;
}
public T dequeue() {
if (size == 0) {
throw new RuntimeException("Queue is empty.");
}
T element = data[front];
front = (front + 1) % data.length;
size--;
return element;
}
public T peek() {
if (size == 0) {
throw new RuntimeException("Queue is empty.");
}
return data[front];
}
public boolean isEmpty() {
return size == 0;
}
public int size() {
return size;
}
}
在该代码中,我们使用了一个数组data
存储队列中的元素,size
表示队列的大小,front
表示队首元素的下标,rear
表示队尾元素的下标。其中,enqueue()
方法用于入队,dequeue()
方法用于出队,peek()
方法用于取队首元素,isEmpty()
方法判断队列是否为空,size()
方法用于返回队列的大小。
需要注意的是,当队列的大小达到数组的容量时,我们需要循环利用数组的空间,即将队尾指针从数组尾部移到数组头部。
使用泛型实现队列的代码和使用数组实现队列的代码类似,只需要将数组中的类型从Object
改为泛型类型即可。具体代码如下:
public class GenericQueue<T> {
private T[] data;
private int size;
private int front, rear;
public GenericQueue(int capacity) {
this.data = (T[])new Object[capacity];
this.size = 0;
this.front = 0;
this.rear = -1;
}
public void enqueue(T element) {
if (size == data.length) {
throw new RuntimeException("Queue is full.");
}
rear = (rear + 1) % data.length;
data[rear] = element;
size++;
}
public T dequeue() {
if (size == 0) {
throw new RuntimeException("Queue is empty.");
}
T element = data[front];
front = (front + 1) % data.length;
size--;
return element;
}
public T peek() {
if (size == 0) {
throw new RuntimeException("Queue is empty.");
}
return data[front];
}
public boolean isEmpty() {
return size == 0;
}
public int size() {
return size;
}
}
在该代码中,我们使用了泛型T
替代了具体的类型,使得该队列可以存储任意类型的元素。
使用数组和泛型可以很方便地实现队列的数据结构。在实现队列时,需要注意处理队列大小达到数组容量时的情况,以及循环利用数组的空间。另外,在使用泛型时,需要注意类型转换的问题。